《深入理解计算机系统》读书笔记5--- 一个进程的一生

1.进程的相关概念

(1)经典定义:一个执行中的程序的实例。

(2)上下文:系统中的每个程序都是运行在某个进程中的上下文中的,上下文是由程序正确运行所需的状态组成的。

这个状态包括:放在存储器中的程序的代码和数据,它的栈、通用目的的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。

(3)进程提供的关键抽象:A.一个独立的逻辑控制流

                                             B.一个私有的地址空间

但是父进程和子进程是拥有独立但是相同的地址空间,相同的文件描述符拷贝。


注:(1)并发(concurrency)和并行(parallel excution)


并发:一个逻辑流的执行在时间上与另一个流重叠。更准确地说,流X和Y互相并发,当且仅当X在Y开始之后和Y结束之前开始。

并发与计算机核数或者计算机数无关。


并行:如果两个流并发地运行在不同的核心或者计算机上,它们就是并行的。 


2.进程的创建fork

3.进程的运行execve

4.进程的休眠sleep/pause以及进程的停止(收到停止信号)

5.进程的终止exit

6.进程的回收waitpid


注:(1)进程终止有三种方法,①收到一个信号,该信号的默认行为是终止进程 ②从主程序返回 ③调用exit函数

子进程终止以后,进程的资源并没有被释放,必须要尤其父进程回收以后,该进程的资源才被释放。

当然如果父进程终止了,系统会回收僵死的进程。

(2)进程的三种状态:①运行②停止③终止

停止有很多种可能,有可能是停止固定时间,有可能是停止等待任意信号量,有可能是停止等待SIGCONT信号量。

而子进程终止并不意味着资源被立即释放。


2015/10/11补充:

1.关于fork()函数

函数声明如下:

#include <sys/types.h>

#include <unistd.h>

pid_t fork(void)


函数调用后,就会创建1个子进程,然后和父进程并发地执行。

在父进程中,fork()返回子进程的pid,而在子进程中,fork()返回0.

所以后面的语句可以使用判断fork的返回值来使两个进程进行不同的操作。


2.waitpid()函数

声明如下:

#include <sys/types.h>

#include <sys/wait.h>

pid_t waitpid(pid_t pid, int *status, int options)

(1)参数pid

>0 时,表示等待的子进程的pid。

-1时,表示等待调用该函数的进程的所有子进程。

(2)参数status

是用来存储导致返回的子进程的信息的。

(3)options,下面参数的括号表示宏的实际值

默认值 (0),表示只要有某个子进程终止返回。

WNOHANG (1),表示立即返回。

WUNTRACED(2),表示只要有某个子进程停止或者终止返回。

WNOHANG | WNOHANG,表示上面两者的结合,若是立即有子进程停止或者终止,返回该子进程pid,否则返回0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值