예를 들어, system("sh /mydir/some-script.sh &")
POSIX 시스템 (3)이 비동기 쉘 명령을 호출하면 즉시 반환됩니까?
0
A
답변
1
system("sh /mydir/some-script.sh &")
는
/bin/sh -c 'sh /mydir/some-script.sh &'
system
그것이 내부 쉘을 시작 직후됩니다 외피 반환, 즉시 반환됩니다 실행합니다. 어느 쉘도 some-script.sh
이 완료 될 때까지 기다리지 않습니다.
$ cat some-script.sh
sleep 1
echo foo
$ /bin/sh -c 'sh some-script.sh &' ; echo bar ; sleep 2
bar
foo
2
예, 셸은 스크립트를 포크하고 즉시 반환하지만 방법과 스크립트가 종료되었는지 여부를 쉽게 알 수 없습니다.
아이를, fork(2)
프로세스에 될 것 같은 비동기 명령을 실행 /bin/sh
및 스크립트의 이름으로 설정 인수 중 하나의 이진 세트와 아이에 execve(2)
를 호출하고 폴링하는 "적절한"방법 WNOHANG
옵션을 사용하는 waitpid(2)
시스템 호출을 사용하여 부모로부터 주기적으로. waitpid
이 -1을 반환하면 스크립트가 종료되었으며 반환 코드를 가져올 수 있음을 알았습니다.
사실 system(3)
은 프로세스가 종료 될 때까지 waitpid
에 대한 호출이 차단된다는 유일한 예외와 거의 동일합니다.
왜 사용해 보지 않으시겠습니까? 질문을하고 사람들이 반응하기를 기다리는 것보다 빠를 가능성이 큽니다. – jamessan