Linux系统编程——进程基础知识

Linux系统编程——进程基础知识

1、程序和进程

程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…)

进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程)

一个程序多次运行可以产生不同进程,如:ssh登陆

2、进程控制块(Processing Control Block)

我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。

Ubuntu20.04在/usr/src/linux-hwe-5.8-headers-5.8.0-55/include/linux/sched.h中

3、进程控制

3.1创建子进程fork()函数

在这里插入图片描述

在这里插入图片描述

注意返回值,不是fork函数能返回两个值,而是fork后,fork函数变为两个,父子需【各自】返回一个。

在这里插入图片描述

3.2父子进程的异同

父子进程之间在fork后。有哪些相同,那些相异之处呢?
在这里插入图片描述
父子不同处:
在这里插入图片描述

3.3几个关于进程ID的函数

在这里插入图片描述

3.4exec函数族

exec函数族

在这里插入图片描述

在这里插入图片描述

具体格式,例子

execlp(“ls”, “ls”, “-l”, “-F”, NULL); 使用程序名在PATH中搜索。

execl("/bin/ls", “ls”, “-l”, “-F”, NULL); 使用参数1给出的绝对路径搜索。

3.5回收子进程

孤儿进程

​ 在操作系统领域中,孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程。这些孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作

僵尸进程

僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。
特别注意,僵尸进程是不能使用kill命令清除掉的。因为kill命令只是用来终止进程的,而僵尸进程已经终止。

在这里插入图片描述
1、阻塞等待子进程退出
2、 回收子进程残留资源
3、获取子进程结束状态(退出原因)。

当进程终止时,操作系统的隐式回收机制:1.关闭所有文件描述符 2. 释放用户空间分配的内存。内核的PCB仍存在。其中保存该进程的退出状态。(正常终止→退出值;异常终止→终止信号)

可使用wait函数传出参数status来保存进程的退出状态。借助宏函数来进一步判断进程终止的具体原因。如下图:
在这里插入图片描述

waitpid函数

参数options
在这里插入图片描述

注意:一次wait或waitpid调用只能清理一个子进程,清理多个子进程应使用循环。

参考书籍:《中文版 第三版UNIX 环境高级编程 第3版》

参考教程:linux全套教程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值