Linux 进程基础概念详解

本文详细解析Linux进程的基本概念,包括进程、进程控制块PCB以及Linux下的PCB实现。通过实例探讨进程信息获取、进程状态、创建子进程的fork机制,以及僵尸进程和孤儿进程的产生、危害及解决方案。最后解答了关于进程执行顺序、1号进程、进程创建及进程状态标识等常见问题。
摘要由CSDN通过智能技术生成

目录

一.基本概念

1.进程

2.进程控制块-PCB

3.Linux中的PCB

二.进程信息

三.PID的获取

四.进程的三种状态

五.细分的七中进程状态

六.进程的内部

1.程序计数器

2.上下文信息

3.内存指针

4.IO信息

七.fork创建子进程

1.代码模拟

2.原理

八.僵尸进程

1.僵尸进程的产生

2.僵尸进程产生的原因

3.代码模拟

4.僵尸进程的危害

5.解决方案

九.孤儿进程

1.孤儿进程的产生

2.代码模拟

十.问题回答

问题1:父进程子进程 谁先执行?

问题2:什么是1号进程?

问题3:正常在命令行中启动的程序,他的父进程是谁?

问题4:fork()调用子进程,子进程中的内容是对父进程的拷贝,会不会出现无限调用子程序的情况出现?

问题5:S+ R+ 后面的+ 是什么意思?

一.基本概念

1.进程

通俗的观念:程序的一个执行实例,或正在执行的程序。
内核的观点:担当分配系统资源(CPU时间和内存)的实体。

2.进程控制块-PCB

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。

3.Linux中的PCB

Linux操作系统下的PCB是:task_struct。task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

二.进程信息

使用 ps aux 命令可以查看进程,如下:

进程信息也可以进入/proc 系统文件夹查看:

 那么如何查看我们自己写的代码被加载到内存后的进程信息?先来看如下代码:

 

 这两种方法都可以,查到进程的进程号。

要查看自己写的代码进程信息,首先要保证代码的运行时间够长,如果运行时间太短,那么查看时进程就已经退出,查看不到了。以上代码中我使用了死循环,将test.c文件进行编译生成test文件运行后,使用命令 ps aux | grep mytest 就可以查看到进程信息。如果要停止运行,在执行的界面输入:Ctrl+c 就可以结束当前进程。

注意:只有代码在运行的时候,才能看到进程。

三.PID的获取

描述本进程的唯一标示符(PID),用来区别其他进程。创建任何进程时,它都有一个唯一的ID,称为其进程ID。有两个系统调用函数用于获取进程ID,这些函数是:
1.getpid() 

它的返回值就是当前进程的PID,当代码运行起来后,PID被打印出来,结果与用命令 ps aux | grep test 查看到的结果一致。

2.getppid()

它的的返回值是当前进程的父进程的PID,与getpid()功能类似。

四.进程的三种状态

站在CPU的角度,进程状态可以分为:运行、就绪、阻塞。

运行:进程占用CPU,正在使用CPU来执行自己的代码

就绪:进程已经具备运行条件,但是CPU没有分配过来。

阻塞:进程等待某种资源,而不能运行。例如:等待IO输入。

用一幅图来直观的理解:

 五.细分的七中进程状态

1.R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。来看如下代码:

代码是死循环,并且什么都不做,当程序运行起来后CPU的占用率非常高,此时当前进程就是运行状态。
2.S 可中断睡眠睡眠状态(sleeping): 意味着进程在等待事件完成。
如下代码:

 3. D 不可中断睡眠状态休眠状态,在这个状态

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值