相关疑难解决方法(0)

子进程终止时了解SIGCHLD

我无法理解以下程序的输出.我观察到在子进程返回后,父进程在wait()之前没有休眠3秒.如果SIGCHLD设置为默认处理程序,则它会休眠3秒,调用wait并按预期返回.到底发生了什么?

# include <unistd.h>
# include <sys/types.h>
# include <stdio.h>
# include <sys/wait.h>
# include <signal.h>

void handler(int sig) {
printf("Iam in handler ...\n");
}

main() {

int status;
pid_t pid;

struct sigaction act;
//act.sa_flags=SA_NOCLDSTOP;
act.sa_handler=handler;
sigaction(SIGCHLD,&act,NULL);

if(!fork()) {
printf("child process id is  %d\n",getpid());
 return 1;
}  

printf("xxx ...\n");
sleep(3);
pid = wait(&status);
printf("process terminated is %d\n",pid);

}

output::

xxx ...
child process id is  2445
Iam in handler ...
process terminated is 2445
Run Code Online (Sandbox Code Playgroud)

c linux

6
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×1

linux ×1