UNIX环境高级编程笔记-8进程控制

进程标识符

    记住2个函数,可以获得自身进程号和父进程号:

    pit_t getpid(void);

    pie_t getppid(void);


fock函数(重点)

    1、fock函数调用一次,但是返回两次,在子进程中返回0,父进程中返回子进程ID。由于进程ID不可能为0(ID为0的为系统进程),且一个子进程只可以有一个父进程调用getppid获得,所以可以通过<0判断fock失败;==0判断为子进程;>0判断为父进程

    2.子进程和父进程继续执行fock后的指令。子进程是父进程的副本。例如,子进程获得父进程的数据空间、堆和栈的副本。注意,这是子进程所拥有的副本。父、子进程并不共享这些存储空间部分。父、子进程共享正文段。APUE中的8-1程序清单需要好好理解,尤其是在控制台运行和重定向时I/O缓冲区的刷新问题。

    3.一般来说,在fock之后是父进程先执行还是子进程先执行是不确定的。可以使用进程控制和同步代码来控制进程执行顺序。

    4.fock失败的原因只有2个:一是已经有了太多的进程,例如工作中遇到的内存不足、句柄泄露等资源不足引起的问题;二是该实际用户ID的进程总数超过了系统限制。CHILD_MAX来规定。

    5.fock的2种用法:一是一个父进程希望复制自己,使父、子进程同时执行不同的代码段。在网络服务进程中常用——父进程等待客户端的服务请求,当请求到达时,父进程调用fock,是子进程处理请求,父进程继续等待下一个服务;二是一个进程要执行不同程序,例如shell。


exit函数

    5种进程退出方式:main的return;exit函数;_exit或_Exit函数;进程最后一个线程返回;进程最后一个线程调用pthread_exit;

    3种异常终止方式:abort;进程街道某些信号时,由自身注册的信号处理函数退出;最后一个线程对“取消”做出响应。

    不管进程如何和终止,最后都会执行内核中的同一段代码。这段代码为相应进程关闭所有打开描述符,释放它所使用的存储器等。

    僵死进程:一个已经终止,但是父进程尚未对其进行善后处理(获取终止进程相关信息,释放它仍占用的资源)的进程。

    除非保证父进程先于子进程结束或者保证父进程在子进程结束前执行waitpid(),子进程均有机会成为僵尸进程。

    父进程一次fork()后产生一个子进程随后立即执行waitpid(子进程pid, NULL, 0)来等待子进程结束,然后子进程fork()后产生孙子进程随后立即exit(0)。这样子进程顺利终止(父进程仅仅给子进程收尸,并不需要子进程的返回值),然后父进程继续执行。这时的孙子进程由于失去了它的父进程(即是父进程的子进程),将被转交给Init进程托管。于是父进程与孙子进程无继承关系了,它们的父进程均为Init,Init进程在其子进程结束时会自动收尸,这样也就不会产生僵尸进程了。


exec函数

    fork创建子进程后,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec时,该进程执行的程序完全替换为新的程序,而新的程序则从其main函数开始执行。因为exec并不创建新进程,所以前后的进程ID并未改变。exec知识用一个全新的程序替换了当前的正文、数据、堆和栈段。

    重要:用fork可以创建新进程,用exec可以执行新程序。exit函数和两个外套函数处理终止和等待终止。这些是基本的进程控制原语。用这些原语来理解后构造popen和sysem之类的函数


wait和waitpid函数

当一个进程正常或异常终止时,内核就像其父进程发送SIGCHLD信号。

pid_t wait(int *statloc);

pid_t waitpid(pid_t pid, int *statloc, int option);

两个函数返回值:成功返回进程ID,0,出错返回-1.


解释器文件

所有现今的UNIX系统都支持解释器文件(interpreter file)。这是文本文件,起始格式是:#! pathname [optional-argument]

内核使调用exec函数的进程实际执行的并不是该解释器文件,而是第一行中pathname指定的文件。

要将解释器文件(例如shell脚本文件)解释器(例如/bin/bash)区分开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值