进程的状态

在linux当中新的进程往往是通过父进程创建出来的

那应该怎么创建?

我们发现我们大部分程序都是有一个ppid的代码,这个就是他父进程的id,我们发现无论这个程序运行还是关闭之后再一次运行,它的ppid都是不变的,

说明他就是有一个父进程运行起来的,这个是Bash(命令行解释器)

那么到底是怎样创建的呢?

本质上是os内部多了一个进程重新生成了一个task_struct+代码数据

如何多呢?

是通过了一个系统函数的调用fork()

fork

在代码中使用fork之后就有两个执行流一个是原来的,一个是被创建的子进程

在bash'中也是通过fork来进行创建的

proc

在我们的系统中有这个文件夹叫/proc

这个文件里面是全部正在运行的进程

这些进程都是以文件夹的形式存在

打开之后就会显示此进程的属性

cwd

在进程的文件夹中存在一个pwd

这里面是我们这个进程当前的路径,我们如果开一个新的文件,不写任何路径,就默认在cwp这个路径下,

注意cwp:显示的是这个程序是存在那个问价夹里面的

chdir

我们可以通过chdir改变当前路径,就是改变cwd

linux进程也和linux一样是树状结构

fork

fork之后代码是共享的,所以一般我们需要分流

就如图,我们需要考虑返回值的问题

返回值:成功了会存在两个返回值

返回0表示子进程

返回其他数(id)就代表父进程

fork一下,一个代码两个进程

子问题

1.为什么子进程返回的是0,父进程返回的是子进程的id?

一个父进程可以有多个子进程,一个子进程只能有一个父进程

所以给父进程返回id用于管理不同的孩子

而孩子只需要用0来进行标记即可

2.为什么会存在两个返回值?

return也是代码呀

我们上面说了父子用一套代码,两个工作流,两个进程,所以两个返回值不是很正常吗

进程状态

有三种运行

阻塞

挂起

运行:在cpu中会存在一个栈来储存正在被执行或者将要被执行的进程,故:我们就说只要是子啊这个站里面的我们都是运行状态的进程

阻塞:当我们一个代码遇到scanf或者cin》》的时候

程序就会停下来

我们在等什么?

在等硬件就绪(在这里也就是键盘)

那么谁是第一个知道的呢?

操作系统

why

因为他是管理硬件的

,要是没有从硬件中读到数据,说明硬件就还没有准备好

故就会从运行状态转移到阻塞状态

相关推荐
kyle~1 小时前
Linux --- Socket 用户进程与内核网络协议栈之间的统一接口
linux·arm开发·网络协议
重生之小比特1 小时前
【Linux系统】07 进程状态
linux·运维·服务器
张洛闻Eren2 小时前
Ansible【第二课】:实施 Ansible Playbook
linux·运维·服务器·云原生·kubernetes·k8s·ansible
Zhu7582 小时前
【开源脚本】Ubuntu环境下载任意软件
linux·运维·ubuntu
0+1113 小时前
Linux --传输层协议 TCP
linux·网络·tcp/ip
Sylvia-girl3 小时前
【二】:Linux基础指令
linux·运维·服务器
坤坤子吖3 小时前
Linux 进程信号入门——从 Ctrl+C 到 kill
linux·开发语言·c++·笔记·学习
江湖有缘3 小时前
Docker实战 | 使用Docker部署ShipShipShip自托管产品更新与功能投票系统
java·linux·服务器·docker
LXY_BUAA3 小时前
《嵌入式操作系统》_framebuffer驱动_20261008
linux·运维·算法