#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
void killchild(int pid_child);
void killchild(int pid_child){
printf("killing child process \n");
//调用wait函数
int pidxx;
pidxx=wait(NULL);
printf("killed the child process, whose pid is %d \n",pidxx);
exit(0);
}
void killyourself(int ownid);
void killyourself(int ownid){
//printf("killing child process %d \n",pid_child);
printf("parent sent signal, child process killed itself \n");
exit(0);
}
int main(){
// 要捕捉的信号
(void) signal(SIGALRM,killchild);
int pid_child=0;
int pid = fork();
if(pid==-1){
perror("fork failed\n");
// exit(1);
exit(EXIT_FAILURE);
}
if(pid==0){
//子进程
pid_child=getpid();
//子进程也signal一个信号
(void) signal(SIGHUP,killyourself);
sleep(10);
kill(getppid(),SIGALRM);
}else{
//父进程
//等待
// pause();
sleep(6);
kill(pid_child,SIGHUP);
exit(0);
}
}
当父进程先结束时,会发送信号给子进程,子进程强制退出。(例如:父进程 sleep(6))
当子进程先结束时,会向父进程发出信号,结束进程。(例如:父进程 sleep(15))
如果写的有问题欢迎指出~
(注,文件名称命名错了semaphore是线程里的内容)