Linux进程详解一

进程

教材观点

  • 加载到内存中的程序
  • 正在运行的程序

进程 = 内核PCB对象 + 可执行程序
内核数据结构 + 可执行程序 = 进程

  • 在计算机中可以同时打开多个程序,此时一定将多个.exe文件加载到了内存中

  • 操作系统需要管理多个加载到内存中的程序

  • 操作系统将加载到内存中的程序先进行描述,再进行组织管理、

    几乎所有的独立的指令也是程序,所有在执行指令的时候也要变成进程。

进程PCB

  • 一个进程就是操作系统对一个加载到内存中的程序的描述。
  • 每个进程都有一个描述这个进程所对应的一个结构体变量。这种数据结构结构体变量在操作系统层面中称为PCB(process ctrl block - 进程控制块)。
struct 
{
	//状态
	//优先级
	//内存指针字段
	//...包含进程几乎所有的属性字段
	struct PCB *next;  //指向下一个进程的PCB
}
  • 一个可执行程序加载到内存中,操作系统会先给这个进程创建一个PCB,这个pcb会有描述这个可执行程序的所有属性,以及指向这个进程代码块在内存中的位置的指针,再将这个进程的PCB链接到整个系统中的进程管理链表中。
  • 加载到内存中的可执行程序的代码块加上描述其的PCB才是一个进程
  • 先描述再组织

进程排队,是让进程的pcb去排队。
进程调度,是对进程的pcb进行调度。
所有对进程的控制和操作,都只和进程的PCB有关,和进程的可执行程序没有关系。

可以将pcb放入任何数据结构(容器)中,对pcb进行管理。
例如放入链表中,对pcb管理也就是对链表的结点进行管理。

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
课本上称之为PCB,Linux操作系统下的PCB是:task_struct

task_struct

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

内容分类

  • 标示符:描述本进程的唯一标示符,用来区别其他进程。
  • 状态:任务状态、退出代码、退出信号等。
  • 优先级:相对于其他进程的优先级。
  • 程序计数器:程序中即将被执行的下一条指令的地址。
  • 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
  • 上下文数据:进程执行时处理器的寄存器中的数据。
  • I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件猎豹。
  • 记账信息:可能包括处理器时间综合,使用的时钟数综合,时间限制,记账号等。

查看进程

方法一

Linux会将进程信息以文件的方式,显示在系统中的某一个目录中
- `ls /proc`

Linux会将进程的相关信息,在/proc目录下,以一个目录的形式存放,这个进程的所有属性都存放在这个目录下面。

一个进程启动之后,将可执行程序删除,进程仍在执行。在运行一个程序的时候,本质是将程序从磁盘拷贝到了内存中。在程序执行期间,运行中的程序已经与磁盘中的程序没有了关联。

exe -> 指向可执行程序在磁盘中的具体位置
cwd -> 指向当前进程所对应的当前工作目录

  • int chdir(const char *path);
    • 更改当前进程的工作目录
    • 返回0成功,-1失败

方法二

  • ps axj
while :; do ps axj | head -1 && ps axj | grep myprogress | grep -v grep; sleep 1; done
死循环,先获取系统所有进程,然后打印所有进程中的第一行标题,再获取所有进程,然后筛选出带有myprogress关键字的进程打印,再将获取的所有带有myprogress关键字的进程中带有grep关键字的去除,每一秒循环一次。

用户要获取到进程的标示符,也就是pcb中的信息的时候,必须要调用系统调用,因为pcb在操作系统的内核中,用户不可以越过操作系统直接获取数据。

man2号手册

  • pid_t getpid(void) :获取进程标示符pid
  • pid_t getppid(void):获取当前进程的父进程标示符ppid

每一次启动一个程序,都会获得一个新的标示符id。
我们在命令行中启动的所有的程序,产生的进程都是bash的子进程。

一般在Linux中,所有普通进程都有其对应的父进程。

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

排骨炖粉条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值