假设我有一个主要的C程序,必须等待两个孩子的sigchld
,并且这两个儿子必须做两个单独的任务,例如一个应该写“1”,另一个
一个人应该写“2”,等待2秒然后终止,现在我应该如何编写代码,以便父亲只有在两个儿子以sigchld结束后才能写出他孩子的pid?很明显,我错过了一些理论,如果你查看我的代码,你就会明白我的问题是什么。
之后,我将不得不在第一个儿子之前强行执行第二个儿子,建议?
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char **argv)
{
int pids[2], cpid, i, status;
char buff[200];
for(i=0; i < 2; i++)
{
if ((pids[i] = fork()) < 0)
perror("errno");
else
{
//child
if (pids[i] == 0)
{
if(i == 0)
write(1,"1\n", 2);
else
{
sleep(2);
write(1,"2\n", 2);
}
return 0;
}
}
}
for(i = 0; i < 2; i++)
{
cpid = waitpid(pids[i], &status, 0);
if (WTERMSIG(status))
printf("status:%d , pid terminated:\n", status,cpid);
else
printf("error: not exited with a signal\n");
}
return 0;
}
答案 0 :(得分:0)
如果最后一个for循环更改为:
for(i = 0; i < 2; i++)
{
cpid = waitpid(pids[i], &status, 0);
if (WIFEXITED(status))
printf("status:%d , pid %d terminated normally :\n", status,cpid);
else if (WTERMSIG(status))
printf("status:%d , pid %d terminated by signal:\n", status,cpid);
else
printf("error: not exited with a signal\n");
}
然后事情会更好,因为没有信号来终止孩子。