linux信号与进程问题求解答
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
void fun_sig(int sig)
{
int stat_val;
pid_t pid,pidchild;
pid = fork();
if(pid == 0){
printf("1...\n");
}
else{
pidchild = wait(&stat_val);
printf("2...\n");
}
}
int main()
{
signal(SIGALRM, fun_sig);
pause();
return 0;
}
假设此文件名为signal.c,
运行:./signal&
运行:killall -SIGALRM signal
则可以输出:
1...
2...
================================================================================
现问题为,我把在main函数中将signal设置为一个死循环,运行在后台,我如果将main函数写成如下:
int main()
{
while(1){
signal(SIGALRM, fun_sig);
pause();
}
return 0;
}
则同样用上面的方式运行的话。
结果:
1...
但是一直输出不了2...
求各位大侠赐教!!!!
------解决方案--------------------
刚测试了一下,
pid = fork();
if(pid == 0){
printf("1...\n");
}
里面的Printf后面需要跟一个exit(0);返回子进程的退出状态。否则父进程会在wait那里阻塞。