2011-04-14 2 views

답변

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에 대한 호출이 차단된다는 유일한 예외와 거의 동일합니다.

관련 문제