#include <signal.h> #include <sys/wait.h> 在父进程中注册子进程退出时操作: 子进程退出函数child_wait: static void child_wait (int sig) { int pid; int status; while ((pid = waitpid (-1, &status, WNOHANG)) > 0) { if (WIFEXITED (status)) printf ("--pid=%d--status=%x--rc=%d---/n", pid, status, WEXITSTATUS(status)); else if (WIFSIGNALED(status)) printf ("--pid=%d--signal=%d--/n", pid, WTERMSIG(status)); } } 父进程注册退出函数 struct sigaction siga; siga.sa_handler = child_wait; siga.sa_flags = 0; memset(&siga.sa_mask, 0, sizeof(sigset_t)); 父进程生成子进程: pid_t pid; pid = vfork(); if (pid > 0) { fprintf (stderr, "new child, pid: %d./n", pid); } else if (pid == 0) { /* child process*/ if (execl (workpath, name, NULL) < 0) { printf("execl failed/n"); } _exit (1); } else { /* father process */ perror ("vfork"); }