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

来源:互联网 发布:中国海关贸易数据库 编辑:程序博客网 时间:2024/06/08 19:03



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

0 0
原创粉丝点击