Register signal handler

来源:互联网 发布:淘宝上的评价怎么修改 编辑:程序博客网 时间:2024/05/17 12:48
 //------------------------------------------------------------------
  // Register signal handler
  //------------------------------------------------------------------
  struct sigaction act, oact;

#if 0
  struct sigaction
  {
    void (*sa_handler) (int);
    void (*sa_sigaction) (int, siginfo_t *, void *);
    sigset_t sa_mask;
    int sa_flags;
    void (*sa_restorer) (void);
  };
#endif

  memset(&act, 0, sizeof(act));

  act.sa_handler = signal_handler;
  //int sigemptyset(sigset_t *set);
  sigemptyset(&act.sa_mask);
  act.sa_flags = 0;

  //int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
  sigaction(SIGCHLD, &act, &oact);



void signal_handler(int signum)
{
  fprintf(stderr, "[%d]Caught signal %d.\n", getpid(), signum);

  pid_t pid;
  int status;

  //pid_t wait(int *status);
  if ((pid = wait(&status)) < 0)
  {
    // failed
    fprintf(stderr, "wait() failed: %s\n", strerror(errno));
  }
  else
  {
    fprintf(stderr, "[%d]Child process %d terminated, status = 0x%08x\n", getpid(), pid, status);

    // check status
  }
}


原创粉丝点击