我有一個程序分叉一個進程,並確定子進程是否應該在前臺和後臺運行。我稱之爲信號函數來處理分岔之前的子信號,以確保死亡子進程不會變成殭屍。家長在linux shell上等待以前的子進程
到目前爲止,我的程序正常工作,它會創建一個子進程,每當用戶輸入與「&」命令,運行它的背景,每當用戶輸入而不「&」命令,運行它的前景。
但是,我發現了一個非常有趣的行爲。提供我稱爲這個操作序列:
sleep 5 &
ls
第一個命令將正常工作,父進程不會等待睡眠5完成。但是,當我運行「ls」時,它會打印該文件夾中的所有文件(這很好),但隨後外殼卡住了,等待先前的「睡眠5 &」完成...
爲什麼會出現這種情況?我的兒童和(分叉後)父進程的代碼看起來很像如下:
if (pid == 0)
{
// child process, execute stuff
execv();
}
else if (pid > 0)
{
// parent process: call waitpid to wait for foreground child
}
我試圖做一些研究,但我找不到任何可以幫助我。我嘗試使用「set session-id」爲子進程,通過在execv()之前調用它,但它阻止了我的子進程在終端上打印任何內容。 任何幫助將不勝感激。謝謝!
有很多可能性。沒有看到更多的代碼,很難猜測問題。 – 2013-02-26 00:31:36