Linux2341 Linux2341
关注数: 0 粉丝数: 13 发帖数: 351 关注贴吧数: 3
linux #include<stdio.h> #include<stdlib.h> #include<signal.h> #include<unistd.h> void waiting(); void stop(); void alarming(); int wait_mark; void main(){ int pid1, pid2; while((pid1 = fork()) == -1);//创建子进程1 if(pid1 > 0 ){//如果是父进程 while((pid2 = fork()) == -1);//创建子进程2 if(pid2 > 0){//如果是父进程 wait_mark = 1;//等待状态为1,等待中断信号 signal(SIGINT,stop);//设置收到信号ctrl+C时,执行stop函数 signal(SIGALRM,alarming);//设置收到SIGALRM(时钟)信号,则执行alarming函数 waiting();//休眠5秒 kill(pid1, 16);//向进程1发出信号16 kill(pid2, 17);//向进程2发出信号17 wait(0);//等待进程执行结束,同步 wait(0);//等待进程执行结束,同步 printf("parent precess is killed!\n"); exit(0);//退出进程 } else{ wait_mark = 1;//等待中断信号 signal(17,stop);//设置收到中断信号17,执行stop函数 //signal(SIGINT,SIG_IGN);//设置收到ctrl+c时,忽略该信号 while(wait_mark != 0); lockf(1,1,0);//加锁 printf("child process2 is killed by parent!\n"); lockf(1,0,0);//解锁 exit(0); } } else{ wait_mark = 1; signal(16,stop);设置收到中断信号16,执行stop函数 //signal(SIGINT,SIG_IGN);设置收到ctrl+c时,忽略该信号 while(wait_mark != 0); lockf(1,1,0);//加锁 printf("child process1 is killed by parent!\n"); lockf(1,0,0);//解锁 exit(0); } } void waiting(){ sleep(5);//休眠 if(wait_mark != 0) kill(getpid(), SIGALRM);//向当前进程发出中断信号 } void alarming(){ wait_mark = 0; } void stop(){ wait_mark = 0; }
1 下一页