0
我的程序必須創建n個孩子。當接收到信號時,創建一個孩子。然後第一個孩子等待其他n-1個孩子。第二個等待其他n-2個孩子,等到最後一個孩子跑完並立即結束。 我寫這段代碼,但它不工作,我得到侄子。C:等兄弟進程終止
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
void func(int sign)
{
printf("received signal. I create a child\n");
}
int main(int argc, char*argv[])
{
if(argc!=3)
{
printf("error\n");
return 0;
}
int i,pid,status;
int n=atoi(argv[1]);
unsigned int m=(unsigned int)atoi(argv[2]);
signal(SIGALRM,func);
printf("i'm father: pid %d\n",getpid());
for(i=0; i<n; i++)
{
alarm(m);
pause();
switch(pid=fork())
{
case -1:
printf("error\n");
break;
case 0:
printf("i'm the hild numer %d, my pid is %d\n",i,getpid());
if(i!=n-1)
{
wait(NULL);
break;
}
else
{
printf("%d i have fnished\n",getpid());
exit(0);
}
break;
default:
wait(NULL);
break;
}
}
printf("finish\n");
return 0;
}
正確的說法是把它稱爲一個'孩子process' – 2014-09-03 19:04:33
你會需要一些方法來所有的子ID傳遞給所有的孩子們。否則,第二個孩子將無法等待所有尚未創建的孩子...... – twalberg 2014-09-03 19:10:24
父進程正在啓動所有子進程。 wait()函數僅等待* current *進程的子進程。由最後一個孩子創建的代碼將終止,(其他孩子都不終止)導致父親終止(所有其他孩子仍然持有'等待(空)')I.E.所有的孩子都需要一些邏輯來使他們終止。一種方法是父親初始化一個常用變量,讓孩子繼續執行,然後在所有孩子生成後重置變量,以便孩子終止。 – user3629249 2014-09-04 20:20:26