C程序完成:父进程创建一个子进程,父进程对子进程设置一个报警信号,然后父进程等待子进程的结束,如果此时报警信号先到,就终止子进程。
2015-06-16 16:05
549 查看
#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是线程里的内容)
#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是线程里的内容)
相关文章推荐
- Postman - 測試 API 的好工具
- android 状态栏及通知栏中的下载动画效果实现
- SSD 之BBM坏块管理机制
- 简单Clock算法
- Hadoop2.x的Eclipse插件编译与安装
- 接口测试-自动化-Java实现-CommonClass
- 后HTML5时代
- GRE作文备考——自我控制
- SVM 支持向量机 opencv实现
- TP的多表查询+分页范例
- java web 项目log 配置 (将log 和hibernate的hql/sql 信息打印到控制台和日志文件中)
- 造轮子计划之linux下通过matlab读写mat文件
- storm work配置JMX监控
- 关于Nios中对EPCS进行flash烧写出现以下错误Error: Error code: 8 for command: nios2-flash-programmer...的解决办法
- Hibernate 锁机制
- C++ 获取文件夹下的所有文件名
- do while
- hadoop的关键进程
- sqoop 1.4.4-cdh5.1.2快速入门
- 通过boundingRectWithSize:options:attributes:context:计算文本尺寸