UNIX环境高级编程读书笔记(八)—进程控制 (2)
来源:互联网 发布:俄罗斯听歌软件 编辑:程序博客网 时间:2024/06/04 17:59
6.
名称::
vfork
功能:
创建一个进程
头文件:
#include <unistd.h>
#include <sys/types.h>
函数原形:
pid_t vfork(void);
参数:
无
返回值:
进程id.
vfork与fork一样都创建一个进程,但是它并不是将父进程的地址空间完全复制到子进程中,在子进程调用exec或exit之前,它在父进程的空间中运行。这要就提高了效率。
vfork和fork的另一个区别是:vfork保证子进程先运行,在它调度exex或exit后父进程才可能被调度运行。
三、等待进程终止
7.
名称::
wait/waitpid
功能:
等待一个进程的终止
头文件:
#include <sys/types.h>
#include <sys/wait.h>
函数原形:
pid_t wait(int *statloc);
pid_t waitpid(pid_t pid,int *statloc,int options);
参数:
statloc 指向存放终止状态单元的指针
pid options 控制wait的操作
返回值:
若成功返回进程id,若出错返回0。
两个函数都是的功能都是获取子进程终止状态,但在一个子进程终止前,wait使其调用者阻塞,而waitpid有一个选项,可使调用者不阻塞。
如果一个之进程已经终止,并且是一个僵尸进程,则wait立即返回并取得该子进程的状态,否则wait使其调用者阻塞直到一个子进程终止。
waitpid并不等待在其调用之后的第一个终止进程,它有若干个选项,可以控制它所等待的进程。
对于waitpid函数的参数pid的解释如下:
pid==-1 等待任一子进程。
pid>0 等待其进程与pid相等的子进程。
pid<-1 等待其组id等于pid绝对值的任一子进程。
options参数使我们能进一步控制waitpid的操作。此参数可以是0,或者是:
WCONTINUED 用于作用控制
WNOHANG 若pid指定的子进程并不是立即可用的,则waitpid不阻塞,此时其返回值为0。
WUNTRACED 用于作业控制。
对于僵尸进程的解释:
在一个进程调用了exit之后,该进程并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构。
在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。
下面是wait的一个例子。
/*8_3.c*/
#include <stdio.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <unistd.h>
main()
{
pid_t pid;
pid_t cpid;
if((pid=fork())==0)
{
printf(“I’m a child,my id is %d/n”,getpid());
sleep(1);
exit(1);
}
else
{
printf(“I’m a father,my id is %d/n”,getpid());
if((cpid=wait(NULL))!=-1)
printf(“I catch a child is %d/n”,cpid);
}
}
运行结果是:
I’m child,my id is 16557
I’m father,my id is 16556
I catch a child is 16557
程序先打印子、父进程的id.然后子进程调用sleep函数,这时父进程阻塞,直到子进程调用exit终止退出,父进程获得子进程终止信息。
8.
名称::
wait3/wait4
功能:
等待一个进程的终止
头文件:
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <sys/resource.h>
函数原形:
pid_t wait3(int *stacloc,int options,struct rusage *rusage);
pid_t wait4(pid_t pid,int *statloc,int options,struct rusage *rusage);
参数:
返回值:
若成功返回进程id ,若出错返回-1。
wait3,wait4的功能更强大,这与附加参数rusage有关。该函数要求内核返回由终止进程及其所有子进程使用的资源汇总。资源统计信息包括用户CPU时间总量,系统CPU时间总量,页面出错次数,接收到信号的次数等。
- UNIX环境高级编程读书笔记(八)—进程控制 (2)
- UNIX环境高级编程读书笔记(八)—进程控制 (2)
- UNIX环境高级编程读书笔记(八)—进程控制 (2)
- UNIX环境高级编程读书笔记(八)—进程控制 (1)
- UNIX环境高级编程读书笔记(八)—进程控制 (3)
- UNIX环境高级编程读书笔记(八)—进程控制 (1)
- UNIX环境高级编程读书笔记(八)—进程控制 (3)
- UNIX环境高级编程读书笔记(八)—进程控制 (1)
- UNIX环境高级编程读书笔记(八)—进程控制 (3)
- 《UNIX环境高级编程》八进程控制读书笔记
- UNIX环境高级编程(八)进程控制
- linux进程控制(一)--unix环境高级编程读书笔记
- UNIX环境高级编程读书笔记(十三)—守护进程
- UNIX环境高级编程读书笔记(十三)—守护进程
- UNIX环境高级编程学习笔记(八)进程环境
- UNIX环境高级编程读书笔记(七)—进程环境 (2)
- UNIX环境高级编程读书笔记(七)—进程环境 (2)
- 《unix环境高级编程》 读书笔记 (2)
- 网址大收集
- Spring中事件处理的小技巧
- java面试题之一
- 启动iis时,发生错误0x8ffe2740的解决办法
- 组件模型设想1
- UNIX环境高级编程读书笔记(八)—进程控制 (2)
- JETSPEED2的构建
- SWT(JFace)体验之syncExec与asyncExec
- JUnit3.8的初步学习
- arm-linux-gcc工具链下载
- 三个框架的原理
- 函数fork与vfork的区别与联系详解
- 10步骤优化SQL Server 数据库性能
- 文档视图结构下多视图间的控制