日期:2014-05-16  浏览次数:20774 次

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