2011-04-14 30 views

回答

1
system("sh /mydir/some-script.sh &") 

執行

/bin/sh -c 'sh /mydir/some-script.sh &' 

system會盡快回來作爲外殼的回報,這將是立即將其啓動內殼之後。這兩個shell都不會等待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

是,shell將叉腳本並立即返回,但你不必知道腳本如何以及是否結束的一個簡單的方法。

「正確」的方式來運行這樣的異步命令將fork(2)你的過程中,隨着二進制集合/bin/sh和設置您的腳本的名稱一個參數調用execve(2)的孩子,輪詢孩子定期從父母使用waitpid(2)系統調用WNOHANG選項。當waitpid返回-1時,您知道腳本已結束,您可以獲取其返回碼。

實際上,system(3)所做的幾乎與唯一的例外情況相同,即對waitpid的調用會阻止,直到進程終止。