头文件:
#include <sys/types.h>
#include <signal.h>
函数原型:
int kill( pid_t pig , int sig);
函数描述:
kill()函数可以向任何进程发送信号
如果进程pid确定,信号sig将被发送给进程pid
pid = 0; sig将会被发送至当前进程组的每一个进程
pid = -1; sig将被发送至除进程1之外的所有允许发送的进程
pid<-1; sig将被发送至pid绝对值进程
一般可发送sig=0的信号用来检测进程是否存在
返回值:
0 成功
-1 失败
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void fa(int signo){//父进程处理SIGCHLD信号函数
printf("fa%d进程捕获到信号%d\n", getpid(), signo);
}
void fb(int signo){//子进程处理SIGUSR1信号函数
printf("fb%d进程捕获到信号%d\n", getpid(), signo);
}
int main()
{
if(kill(12345, 0)==-1){//给12345进程发空信号(其实是不发信号,只检测错误)
printf("pid=12345的进程不存在\n");
}
pid_t res = fork();
if(res>0){//父进程
kill(res, SIGUSR1); 向res发送SIGUSR1信号
signal(SIGCHLD, fa);//父进程捕获子进程的信号,SIGCHLD信号可捕捉子进程退出所发出的信号
sleep(3);
return;
}
signal(SIGUSR1, fb);//子进程捕获父进程的信号,SIGUSR1为用户自定义信号
sleep(2);
}