linux进程系列(9)wait函数 代码示例
来源:互联网 发布:dede分类目录源码 编辑:程序博客网 时间:2024/06/05 19:08
一个父进程创建了三个子进程,三个子进程分别以不同的状态停止运行,通过宏获取当前子进程的结束状态。
main.cpp
#include <unistd.h>#include <string.h>#include <stdlib.h>#include <sys/wait.h>#include <sys/types.h>#include <stdio.h>void out_status(int status){if(WIFEXITED(status)){printf("normal exti: %d\n", WEXITSTATUS(status));}else if(WIFSIGNALED(status)){printf("abnormal term: %d\n", WTERMSIG(status));}else if(WIFSTOPPED(status)){printf("stopped sig: %d\n", WSTOPSIG(status));}else{printf("unkown sig\n");}}int main(void){int status;pid_t pid;if((pid = fork()) < 0){perror("forlk error");exit(1);}else if(pid == 0){printf("pid: %d, ppid: %d\n", getpid(), getppid());exit(3);//子进程停止运行}//父进程调用wait阻塞,等待子进程终止并回收wait(&status);out_status(status);printf("-------------------------------------\n");if((pid = fork()) < 0){perror("fork error");exit(1);}else if(pid == 0){printf("pid: %d, ppid: %d\n", getpid(), getppid());int i = 3;int j = 0;int k = i / j; //除零操作printf("k: %d\n", k);}wait(&status);out_status(status);printf("-----------------------------------\n");if((pid = fork()) < 0){perror("fork error");exit(1);}else if(pid == 0){printf("pid: %d, ppid: %d\n", getpid(), getppid());pause();//暂停} do { //如果返回的是0,说明子进程没有结束,如果子进程结束返回的是子进程pid pid = waitpid(pid, &status, WNOHAND | WUNTRACED);//非阻塞方式 if(pid == 0)//子进程没有结束 { sleep(1);//父进程睡眠 } }while(pid == 0); out_status(status);printf("-----------------------------------\n");return 0;}
执行程序,并对第三个子进程发生终止信号:
若对第三个进程发送暂停信号,然后再发送终止信号,如果在这种情况下使用的是wait函数,则第三个进程不会被终止,因此在上面的代码中我们使用了waitpid函数。
阅读全文
0 0
- linux进程系列(9)wait函数 代码示例
- linux进程系列(8)wait函数
- Linux进程 -- wait/waitpid函数
- 【经典转载】Linux进程学习系列之五 等待进程结束wait()和waitpid()函数
- Linux编程基础之进程等待(wait()函数)
- Linux编程基础之进程等待(wait()函数)
- (三)Linux进程、fork、wait、exec函数
- Linux wait()函数
- linux进程学习,使用wait函数
- Unix进程控制之3---wait函数系列
- linux系统编程之进程(四):wait/waitpid函数与僵尸进程、fork 2 times
- Linux进程理解与实践(四)wait函数处理僵尸进程
- Linux进程理解与实践(四)wait函数处理僵尸进程
- linux系统编程之进程(四):wait/waitpid函数与僵尸进程、fork 2 times
- linux C进程 进程等待wait与waitpid函数
- Linux系统编程(9)—— 进程之进程控制函数exec系列函数
- wait函数和僵尸进程(APUE)
- wait系列函数
- 模板匹配
- android 沉浸式设计方案总结
- 打开一个窗口
- SVN服务器连不上——svn:E170013,svn:E1700113
- linux报No space left on device错误
- linux进程系列(9)wait函数 代码示例
- 洛谷 七月月赛
- electron安装与配置
- 【解决】微信6.5.5版本后转发朋友、分享朋友圈不能显示缩略图
- 2017-06-30 DBA日记,ora-19511及RMAN-06207的诊断和处理
- Git Day 1:添加文件到版本库
- zookeeper在dubbo中的作用
- Android开发 之 全屏显示布局(相关主题,状态栏,布局填充)
- tensorflow学习:常用函数说明