【Linux进程一】进程的概念

1.认识PCB(系统如何管理进程?)

冯诺依曼体系中讲到,管理的本质是管理数据,要先描述再组织

在内存中,系统如何管理进程呢?

  • 先描述:创建一个结构体,将进程的数据储存进去
struct data
{
	//id
	//代码地址
	//状态
	//优先级
	struct data next*;
}

这样的一个结构体叫做PCB(进程控制块)
PCB是这样的结构体的总称,在Linux系统下,PCB具体叫做struct task_struct

  • 再组织:用链表等数据结构将结构体链接起来

系统对进程的管理就变成了对链表的增删查改

2.进程队列

当进程在链表中时,会等待CPU寻找PCB处理,而CPU不能同时处理多个进程,因此需要进程排队,这就是进程队列

请添加图片描述

在内存中,一个PCB进程控制块可同时位于多个数据结构中
比如PCB既在管理PCB的链表上,又在进程队列中

3.进程标识符pid

为了观察一个进程,我们先写一个死循环

 #include<stdio.h>  
 #include<unistd.h>  
 
 int main()  
 {
     while(1)
     {
         printf("我是一个进程\n");
         sleep(1);                                                                                                                                     
     }                                       
     return 0;                           
 }

再将此会话打卡第二个窗口,登陆后输入

ps ajx | head -1 && ps sjx | grep mybin

便可观察到进程的pid了(左边窗口会执行死循环一直打印,右窗口观察)
在这里插入图片描述

可以看到这个死循环mybin的pid是735589
第二个红色mybin是grep指令形成的mybin文件

4.终止进程

平时我们常用ctrl + c来终止进程,这只能在运行程序的地方使用,并且只能在前台结束进程,对后台进程无效
因此我们可以用进程pid直接杀掉进程:kill -9 pid(将pid替换为进程的pid即可)

5.自动获取pid

写代码时,想要运行的程序自动获取自己的pid,就不能用ps指令了
c语言中有一个函数是getpid(),可以获取本身进程的pid

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.父进程

当使用ps指令查看进程的pid时,我们还可以在首列看到一个ppid,这就是父进程
在这里插入图片描述
在程序中想查看本身的父进程ppid,可使用函数getppid()

在这里插入图片描述
在这里插入图片描述

我们发现每次进程的ppid是不变的,因为在命令行中父进程一般是命令行解释器bash

在这里插入图片描述
在这里插入图片描述

命令行中启动的进程都是由bash为父进程模拟创建子进程的

将在下章详细讲述父子进程的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值