有什麼辦法來區分程序中由不同的fork()函數創建的子進程。fork()內fork()
global variable i;
SIGCHLD handler function()
{
i--;
}
handle()
{
fork() --> FORK2
}
main()
{
while(1)
{
if(i<5)
{
i++;
if((fpid=fork())==0) --> FORK1
handle()
else (fpid>0)
.....
}
}
}
有什麼辦法,我可以通過與fork1和FORK2創建子進程區分?因爲我試圖在SIGCHLD處理程序函數中減小全局變量'i'的值,並且它應該僅針對由FORK1創建的進程遞減..
我嘗試使用數組並保存子進程ID由FORK1創建的進程由父進程完成。我會遞減的「我」只值,如果死去的孩子的進程ID是在陣列內...
但我面臨的一個問題,下面的場景
child1,parent1,child1打死,的child2,的child2殺死,parent2
child1的櫃面,因爲它是parent1陣列正確更新後死亡。
但是,在它的pid值被數組中的parent2更新之前,child2會被殺死的情況是什麼?由於child2 PID值不在數組中,所以'SIG'信號處理函數內部的'i'值不會相應地減少。
可能的重複:http://stackoverflow.com/questions/340283/avoiding-a-fork-sigchld-race-condition – jschmier 2010-03-16 22:44:41
嗯......實際上我還沒有找到它.. – codingfreak 2010-03-25 06:34:45
你是如何設置信號處理程序?用'signal','bsd_signal'或者'sigaction'? – Random832 2015-02-09 18:54:31