[apue] 等待子进程的那些事儿】的更多相关文章

谈到等待子进程,首先想到的就是SIGCHLD信号与wait函数族,本文试图厘清二者的方方面面,以及组合使用时可能不小心掉进去的坑. 1. 首先谈单独使用SIGCHLD的场景.下面是一段典型的代码片段: #include "../apue.h" #include <sys/wait.h> #define CLD_NUM 2 static void sig_cld (int signo) { pid_t pid = ; ; printf ("SIGCHLD recei…
我们一直在强调一个概念就是进程是一个程序执行的实例,是内核在虚拟概念下创建的实体,它实例化的体现在用户态就是程序代码和代码使用的变量(存储空间),在内核态就是内核为我们每个进程所保存的数据结构(状态信息)等. 当一个进程由于某种原因停止时,内核并不是直接将为它保存的状态信息从内核移除,相反,进程会一直被保持在一种已经终止的状态,直到被它的父进程回收,当父进程回收已经终止的子进程时,内核会将子进程的退出状态传递给父进程,然后抛弃已经终止的进程,从此刻开始,这个进程才会消失,一个子进程结束但是还没有…
int status; pid_t t = fork(); if(t){     waitpid(t, &status, 0); }else{     system("vi temp.txt");     exit(0); } //父进程和子进程均执行完毕后继续执行下去   分析过程: if 和 else 还是选择分支. 主要的原因是,fork() 函数调用一次,返回两次.两次返回的区别是:子进程的返回值是0,父进程返回值为新子进程的进程ID.返回后,父进程执行waitpid(…
#include <stdio.h> #include <stdlib.h> int main() { pid_t pid = fork(); switch(pid) { : perror("fork failed"); exit(); : { pid = fork(); ) { perror("fork failed"); exit(); } ) { sleep(); printf("第三个进程pid为:%d\n", g…
<!--[if !supportLists]-->Ÿ <!--[endif]-->等待子进程结束 pid_t waitpid(pid_t pid, int *stat_loc, int options) 另外有一个函数叫wait,其相当于 waitpid(-, &status, ) 大家经常看到的关于waitpid的经典例子是:你下载了某个软件的安装程序A,其在安装即将结束时启动了另外一个流氓软件的安装程序B,当B也安装结束后,其告诉你所有安装成功了.A和B分别在不同的进程…
从DOS过来的老鸟应该都知道批处理,这个功能在WINDOWS中仍然保留着.批处理 说白了就是把一系列DOS命令写在一个文本文件里,然后把这个文件命名为XXX.bat(WINXP以后的系统也可以命名为*.cmd),然后运行它就可 以一次执行一系列命令和程序了,当然也包括WINDOWS下的程序. 昨天处理一个问题时需要写一个批处理,批处理的前面运行了几个DOS命令,最后调用一 个WINDOWS程序.可问题是,调用的WINDOWS程序打开后,CMD命令提示符窗口不会关闭,而是要等待这个WINDOWS程…
#include <sys/types.h>#include<sys/wait.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h> int main(){  pid_t pid;                                  //记录fork()的返回值,用于区别父子进程  char *Message;                              //用…
之前一直知道使用 Ctrl+Z 挂起前台进程来阻止进程运行,之后可以再通过 shell 的作业控制 (jobs / fg N) 来将后台进程切换为前台,从而继续运行. 最近学到一种新的方法,对于不停有 console 输出的前台进程,可以使用 Ctrl+S 来 STOP 一个进程的输出,从而暂停进程. 之后可以通过 Ctrl+Q 或输入任意字符来重启 (START) 进程输出,从而继续运行. 看到这个方法,立即想到写个脚本验证一下: deadloop.sh #! /bin/sh var= whi…
先上目录 chapter 3 [apue] dup2的正确打开方式 chapter 10 [apue] 等待子进程的那些事儿 chapter 14 [apue] 使用文件记录锁无法实现父子进程交互执行同步 chapter 15 [apue] 多进程管道读写的一些疑问 [apue] 测试管道容量的一些疑问 [apue] 管道原子写入量的一个疑问 [apue] 使用 poll 检测管道断开 [apue] 使用 popen/pclose 的一点疑问 [apue] popen/pclose 疑点解惑 […
前言 说到 linux 上的文件权限,其实我们在说两个实体,一是文件,二是进程.一个进程能不能访问一个文件,其实由三部分内容决定: 文件的所有者.所在的组: 文件对所有者.组用户.其它用户设置的权限访问位: 启动进程的用户.所在的组.有效用户.有效用户组. 下面先简单说明一下这些基本概念,最后再说明它们是如何相互作用并影响进程访问文件的. 用户与组 用户 ID 唯一标识一个登录用户,记录在口令文件 (/etc/passwd) 中.ID 为 0 的用户为超级用户或根用户 (root),具有绕过文件…