C程序完成:父进程创建一个子进程,父进程对子进程设置一个报警信号,然后父进程等待子进程的结束,如果此时报警信号先到,就终止子进程。



#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是线程里的内容)

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值