linux fork 和signal 的问题
pid_t pid = fork();
if(pid == -1)
{
perror("error!\n");
exit(1);
}
else if(pid == 0)
{
sleep(3);
kill(getppid(),SIGALRM);
exit(0);
}
printf("wait for 3s");
signal(SIGALRM,alrm);//alrm 是处理函数
pause();
printf("receive alarm");
1.创建进程后进程执行顺序是什么?能列举语句执行顺序吗?
2.子程序执行kill(getppid(),SIGALRM) 后是结束父进程,就是这个程序了吗?
谢谢。
------解决方案--------------------1、没有明确的先后顺序。如果你依赖于这个顺序,必须自己采取某种同步机制
2、这个kill调用是给父进程发送SIGALRM信号
------解决方案--------------------
------解决方案--------------------父进程在fork之前就把signal/sigaction注册上SIGALRM, 或者在fork之前sigprocmask阻塞SIGALRM, 并且把pause语句换成sigsuspend来解除ALRM阻塞挂起等待SIGALRM信号唤醒,最好在sigsuspend挂起时阻塞除了ALRM外的所有信号,免得被其他信号唤醒,或者ALRM的信号处理函数设置个全局变量用于检查。
------解决方案--------------------1.父进程和子进程是异步的,先后顺序不确定。
2.