wait() 不会等待每个 child
wait() does not wait for every child
我有一个创建 'n' child 进程的循环。进程进入一个单独的程序并休眠 'x' 秒,然后 return 退出状态 'x'。问题是当我尝试等待每个单独的进程时。似乎我的 wait() 调用等待最后一个进程,然后程序退出。我希望这样 child 退出时我可以打印他们的信息,然后等待下一个 child 退出并打印他们的信息......等等。
代码:
int main()
{
char input[12];
int n, i, ch;
pid_t pid;
int status={0};
printf("Enter an integer: ");
fgets(input, 12, stdin);
if (input[10] == '\n' && input[11] == '[=11=]') { while ( (ch = fgetc(stdin)) != EOF && ch != '\n'); }
rmnewline(input);
n = atoi(input);
for(i=0; i<=n-1; i++)
{
pid = fork();
if(pid == 0)
execl("/home/andrew/USP_ASG2/sleep", "sleep", NULL);
}
for(i=0; i<=n-1; i++)
{
wait(&status);
if(WIFEXITED(status))
{
int exitstat = WEXITSTATUS(status);
printf("Child %d is dead with exit status %d\n", pid, exitstat);
}
}
}
输出:
In child 15930
In child 15929
In child 15928
Child 15930 is dead with exit status 5
Child 15930 is dead with exit status 5
Child 15930 is dead with exit status 5
您忘记捕获 wait()
的 return 值,因此 pid
仍然包含您分叉的最后一个进程的 pid。
这样做:
pid = wait(&status);
你会得到预期的输出。
我有一个创建 'n' child 进程的循环。进程进入一个单独的程序并休眠 'x' 秒,然后 return 退出状态 'x'。问题是当我尝试等待每个单独的进程时。似乎我的 wait() 调用等待最后一个进程,然后程序退出。我希望这样 child 退出时我可以打印他们的信息,然后等待下一个 child 退出并打印他们的信息......等等。
代码:
int main()
{
char input[12];
int n, i, ch;
pid_t pid;
int status={0};
printf("Enter an integer: ");
fgets(input, 12, stdin);
if (input[10] == '\n' && input[11] == '[=11=]') { while ( (ch = fgetc(stdin)) != EOF && ch != '\n'); }
rmnewline(input);
n = atoi(input);
for(i=0; i<=n-1; i++)
{
pid = fork();
if(pid == 0)
execl("/home/andrew/USP_ASG2/sleep", "sleep", NULL);
}
for(i=0; i<=n-1; i++)
{
wait(&status);
if(WIFEXITED(status))
{
int exitstat = WEXITSTATUS(status);
printf("Child %d is dead with exit status %d\n", pid, exitstat);
}
}
}
输出:
In child 15930
In child 15929
In child 15928
Child 15930 is dead with exit status 5
Child 15930 is dead with exit status 5
Child 15930 is dead with exit status 5
您忘记捕获 wait()
的 return 值,因此 pid
仍然包含您分叉的最后一个进程的 pid。
这样做:
pid = wait(&status);
你会得到预期的输出。