2013-08-29 3 views
0

man signal.h는 Solaris 11에 SIGEXIT가 없음을 나타냅니다. 쉘 스크립트에서 어떻게 트래핑 할 수 있습니까? 또는 SIGEXT를 잡아두기의 오래된 행동을 어떻게 시뮬레이트 할 수 있습니까?solaris 11 쉘 스크립트에서 EXIT를 트래핑하는 방법은 무엇입니까?

+1

어떻게 존재하지 않는 것을 잡을 수 있습니까? 빅풋에게 함정을 씌우는 것과 같을거야. 당신은 다른 것들을 많이 잡을 것이지만, 큰 걸음은 없습니다. –

+0

실제 문제에 대한 답을 찾는 대신 특정 해결책을 강요하려고하는 것처럼 보입니다. SIGEXIT를 트랩하여 달성하고자하는 것은 무엇입니까? –

+0

쉘 스크립트가 어떻게 종료 되더라도 명령을 실행하고 싶습니다. 쉘 스크립트를 작성하는 것은 꽤 일반적인 관행입니다. 임시 파일 정리 등. – user2730089

답변

0

정리 작업 및 기타 유사한 작업을 실행하려면 스크립트를 두 번째 스크립트로 래핑 할 수 있습니다. 이 두 번째 스크립트는 첫 번째 스크립트를 실행하고 종료 코드를 저장하고 정리를 수행하고 저장된 코드로 종료 할 수 있습니다.

+0

나는 그것을 할 수는 있지만, 트래핑 출구가 정말로 오래 동안 존재했다면 거대한 진보가 된 것처럼 보입니다. 또한 래퍼 스크립트는 "내부"스크립트의 상태에 대해 어떻게 알 수 있습니까? (어떤 임시 파일이 열렸는 지 등) – user2730089

+0

필자가 읽은 바로는 Solaris 10에도이 신호가 없으므로 오래 전부터 사용되었습니다. 거꾸로 한 걸음 씩 나아가는 것이지만 그것은 출발점입니다. 또한 오류에 따라 종료되지 않도록 스크립트를 수정할 수도 있습니다 (경우에 따라). 상태를 전달하는 것과 마찬가지로 "마스터 임시 파일"을 사용하여 상태를 저장할 수 있습니다. 상태는 래퍼 스크립트에서 래핑 된 스크립트로 인수로 전달됩니다. –

+1

이 신호는 오래전에 추출되지 않았으며 처음에는 존재하지 않았습니다. 이는 가짜 신호입니다. – jlliagre

3

왜 쉘 기능의 C API 매뉴얼을 찾으십니까?

Solaris 11 쉘 (적어도 ksh93, bash 및 sh 이상)에서는 SIGEXIT 신호를 확실히 트랩 할 수 있습니다.

$ cat /etc/release 
          Oracle Solaris 11.1 X86 
    Copyright (c) 1983, 2012, Oracle and/or its affiliates. All rights reserved. 
          Assembled 19 September 2012 
$ cat /tmp/z 
#!/bin/ksh 
trap "date" exit 
sleep 60 
echo done 
$ /tmp/z 
^CThursday, August 29, 2013 10:18:58 PM CEST 
$ 

이 아니며, 유닉스에서 신호 0 또는 SIGEXIT 적이있다 명확합니다. 그 경우 아무것도 이제까지 대상 프로세스에 의해 수신되지 않고 보낸 사람이 알 것이다, 프로세스에 : 그것을 ( kill -0 pid를 예를 들어) 보내

  • : 그것은 두 가지 방법으로 사용할 수있는 "의사"신호입니다 kill return 값을 검사하여 프로세스가 실제로 존재하는지 여부.

  • 쉘 스크립트에서 트래핑하면 스크립트가 종료 될 때 핸들러가 실행됩니다.