读书人

linux信号与进程有关问题求解答

发布时间: 2012-04-09 13:41:25 作者: rapoo

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那里阻塞。

读书人网 >UNIXLINUX

热点推荐