目前我有这样的代码:
void handler(int sig) {
int stat;
wait(&stat);
if (WIFEXITED(stat))
printf("%d", WEXITSTATUS(stat));
}
int main() {
int i;
pid_t pids[5];
signal(SIGCHLD, handler);
for (i=0; i<5; i++)
if ((pids[i] = fork()) == 0) {
printf("1");
while (1) ; /* inf loop */
}
for (i=0; i<5; i++)
kill(pids[i], SIGKILL);
sleep(1);
return 2;
}
包含了所有必需的头文件,例如<signal.h>
和<stdlib.h>
我假设我在运行时至少会获得退出状态,但没有输出。那是为什么?
答案 0 :(得分:1)
但是孩子不会退出,他们会被杀死。它们被信号终止。使用WIFSIGNALED
检查进程是否被信号杀死,使用WTERMSIG
获取信号编号。
进入&#34;退出&#34;它必须从main
函数返回,或者调用exit
。