sigaction疑问??
时间:2010-07-26
来源:互联网
要是父进程创建n个子进程。
......
sa.sa_handler = chld_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags=0;
sigaction(SIGCHLD,&sa,NULL);
......
这样写就能捕获所有的子进程退出时产生的SIGCHLD
......
sa.sa_handler = chld_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags=0;
sigaction(SIGCHLD,&sa,NULL);
......
这样写就能捕获所有的子进程退出时产生的SIGCHLD
作者: kanhfshiys 发布时间: 2010-07-26
对吧
作者: rain_fish 发布时间: 2010-07-26
- #include <sys/types.h> /* 在任何其它 sys 下的头文件之前引用这个头文件 */
- #include <sys/wait.h> /* waitpid()和一些不同的宏所需的头文件 */
- #include <signal.h> /* 信号函数的头文件 */
- #include <stdio.h> /* fprintf函数的头文件 */
- #include <unistd.h> /* fork函数的头文件 */
- void sig_chld(int); /* 我们的 SIGCHLD 信号处理函数的原形(prototype) */
-
- int main()
- {
- struct sigaction act;
- pid_t pid;
-
- /* 设定sig_chld函数作为我们SIGCHLD信号的处理函数 */
- act.sa_handler = sig_chld;
-
- /* 在这个范例程序里,我们不想阻塞其它信号 */
- sigemptyset(&act.sa_mask);
-
- /*
- * 我们只关心被终止的子进程,而不是被中断
- * 的子进程 (比如用户在终端上按Control-Z)
- */
- act.sa_flags = SA_NOCLDSTOP;
-
- /*
- * 使这些设定的值生效. 如果我们是写一个真实的应用程序,
- * 我们也许应该保存这些原有值,而不是传递一个NULL。
- */
- if (sigaction(SIGCHLD, &act, NULL) < 0)
- {
- fprintf(stderr, "sigaction failed\n");
- return 1;
- }
-
- /* fork */
- switch (pid = fork())
- {
- case -1:
- fprintf(stderr, "fork failed\n");
- return 1;
-
- case 0: /* 是子进程,直接结束 */
- _exit(7); /* 退出状态 = 7 */
-
- default: /* 父进程 */
- sleep(10); /* 给子进程完成的时间 */
- }
-
- return 0;
- }
-
- /*
- * 信号处理函数 -- 只有当接收到一个SIGCHLD信号才被调用,
- * 即有一个子进程终止
- */
- void sig_chld(int signo)
- {
- int status, child_val;
-
- /* 非阻塞地等待任何子进程结束 */
- if (waitpid(-1, &status, WNOHANG) < 0)
- {
- /*
- * 不建议在信号处理函数中调用标准输入/输出函数,
- * 但在一个类似这个的玩具程序里或许没问题
- */
- fprintf(stderr, "waitpid failed\n");
- return;
- }
-
- /*
- * 我们现在有保存在‘status’变量中的子进程退出信息并可以使用
- * wait.h中定义的宏对其进行操作
- */
- if (WIFEXITED(status)) /* 子进程是正常退出吗? */
- {
- child_val = WEXITSTATUS(status); /* 获取子进程的退出状态 */
- printf("child's exited normally with status %d\n", child_val);
- }
- }
作者: rain_fish 发布时间: 2010-07-26
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28