【发布时间】:2023-03-15 09:01:01
【问题描述】:
所以,我有这段 C 代码
我无法理解第二个“for”部分是关于什么的。什么时候异常终止?
有人可以告诉我吗?
#include<unistd.h>
#include<stdio.h>
#include <sys/wait.h>
#define N 30
int main() {
pid_t pid[N];
int i;
int child_status;
for (i = 0; i < N; i++) {
pid[i] = fork();
if (pid[i] == 0) {
sleep(60 - 2 * i);
exit(100 + i);
}
}
for (i = 0; i < N; i++) {
pid_t wpid = waitpid(pid[i], & child_status, 0);
if (WIFEXITED(child_status)) {
printf("Child%d terminated with exit status %d\n", wpid, WEXITSTATUS(child_status));
} else {
printf("Child%d terminated abnormally\n", wpid);
}
}
return (0);
}
【问题讨论】:
-
我的建议是从正确缩进代码开始。没有适当的缩进就很难掌握它的结构,我想对于初学者来说比对我来说更难......
-
当它收到信号时它会“异常”终止。见here。因此,在您的示例中,我希望 all 孩子能够正常退出,但是如果您要手动将
SIGKILL发送给其中一个孩子(使用kill -9 <pid>),那么您会看到“异常终止”消息。 -
我在下面写了一些解释,如果这对你有帮助,请在下面的帖子中告诉我
标签: c operating-system fork