Linux-进程的介绍和标示符

什么是进程

日常生活中,我们使用的是Windows多一点,而我们在使用Windows时,打开我们的任务管理器,就能看到各种进程在运行。

 那么,进程是否就等于我们的程序呢?

很多时候,我们看书,书上会这么写,进程是指在计算机内存中已运行的程序。

这种说法其实是不全面的。

操作系统如果要管理进程,那么首先就要收集程序运行的数据,然后再对它进行管理,所以,操作系统就需要拥有一个模块,可以很好的收集、查询所有在运行的数据,这个模块就叫做PCB(process contral block)进程控制模块。

有了PCB,所有的进程管理任务和进程对应的程序没有直接关系,操作系统对进程的管理对PCB强相关,只需要对PCB操作即可。

而进程,就是进程=PCB+你的程序数据和代码。

PCB是什么?它里面是什么东西?

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

在Linux系统中,它的PCB叫做 struct task_struct{...},它本质其实可以理解为结构体,而结构体内部则存放着这个进程的数据和状态,不管你是想对一个进程进行查找还是删除,都必须先查看它的task_struct,然后才能对这个进程进行操作。

那么具体一点,这个结构体存放了什么信息呢?

它里面存放的东西很多,存放着各种信息和进程的当前状态,我们仅介绍一些比较重要的内容。

标示符

标示符:描述本进程的唯一标示符,用来区别其他进程。

而进程的标示符,称为PID,PID是进程的唯一标示符,它是进程的唯一代号。

为了方便观测进程的PID我们先随便写一个程序,让它跑起来。

上面的getpid()和getppid()函数,分别是获得它的PID和PPID,需要包含头文件unistd.h

左侧,我们的死循环程序一直在运行。

右侧,我们使用ps axj | head -1 && ps axj | grep myproc   指令查看我们的进程信息,PID就是我们这个进程的唯一标示符。

而每个进程PID也是存放于PCB中。

而PPID,则是它的父进程的PID。

这里我们就引入了一个新的东西,什么是父进程?  那是不是就有对应的子进程? 是的。

 我们可以使用fork()函数来创建一个子进程,fork如果创建子进程成功,会对父进程返回子进程的PID,会对子进程返回一个0,如果创建失败,则会返回一个<0的数。

使用fork函数创建另一个流,实现一份代码,两个进程,一个称为父进程,一个称为子进程,并且子进程和父进程可以拥有不同的运行结果。

运行代码

 使用ps命令

这时我们就能看到有两个同名进程,而我们可以仔细看看它们的PID和PPID

其中上面PID为23700的进程就是PID为23701的进程的父进程。

可是PID为23700进程的父进程15604又是谁呢?

我们用ps和grep指令搜索进程15604

 这里我们就可以看到是我们的bash(命令行解释器)。

如果继续向上溯源,会一直溯源到我们的操作系统,大家可以下来自己试一试。

总结

1.知道了进程是由PCB和进程的数据和代码构成的。(重点)

2.知道了使用fork函数创建另一个流,实现一份代码,两个进程,一个称为父进程,一个称为子进程,并且子进程和父进程可以拥有不同的运行结果。

3.学会了怎么使用 ps 命令来查看进程的相关信息。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Linux进程管理和进程通信是操作系统中非常重要的概念。我可以为您提供一些关于这两个主题的基本信息。 1. 进程管理: 在Linux中,进程是指在执行中的程序实例。进程管理包括创建、调度、终止和监控进程的活动。以下是一些关于进程管理的关键概念: - 进程标识符(PID):每个进程都有一个唯一的PID,用于标识和跟踪进程。 - 进程状态:进程可以处于运行、就绪、阻塞或终止等不同状态。 - 进程调度:操作系统根据特定算法决定哪个进程应该在给定时间内运行。 - 进程创建:通过fork()系统调用创建子进程,或者通过exec()系列系统调用加载新程序镜像并替换当前进程。 - 进程终止:进程可以自愿终止,或者由其他进程(如父进程或操作系统)强制终止。 - 进程监控:可以使用系统工具(如ps、top)或编程接口(如proc文件系统)来监控和管理进程。 2. 进程通信: 进程通信是指进程之间交换数据和信息的机制。在Linux中,有多种方法可以进行进程间通信,包括: - 管道(Pipe):用于在父子进程或具有亲缘关系的进程之间进行通信。 - 信号(Signal):用于向进程发送简单的通知或中断信号。 - 共享内存(Shared Memory):允许多个进程共享同一块物理内存,以便快速高效地进行数据交换。 - 消息队列(Message Queue):进程可以通过消息队列传递和接收消息。 - 信号量(Semaphore):用于实现进程间的互斥和同步操作。 - 套接字(Socket):适用于网络编程,允许不同主机上的进程进行通信。 这只是对Linux进程管理和进程通信的简要介绍,如果您有任何具体问题或深入了解的需求,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风君子吖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值