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