1. 在多进程间通信中已经描述信号通信,这边重复一遍。
#include <signal.h>
void (*signal(int signo,void (*func)(int)))(int);
返回之前注册的函数指针。
sigaction函数类似于signal函数,完全可以替代后者,也更加稳定。
#include <signal.h>
int sigaction(int signo,const struct sigaction *act,struct sigaction *oldact);
成功返回0,失败返回-1
signo:传递的信号
act:对英语第一个参数的信号处理函数
oldact:获取之前注册的信号处理函数指针,若不需要则传递0
struct sigaction{
void (* sa_handler)(int);
sigset_t sa_mask;
int sa_flags;
}
2. 利用信号销毁僵尸进程
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
void read_childproc(int sig){
int status;
pid_t id = waitpid(-1, &stat