进程的状态

在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

因为他是管理硬件的

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

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

相关推荐
老约家的可汗17 小时前
Linux开发三件套:make、git、gdb 入门指南
linux·运维·服务器
Sw1zzle17 小时前
Go入门(零):Linux Ubuntu 22.04 安装 Go
linux·ubuntu·golang
device_Any17 小时前
接口文档写着三个字段,接口返回了五个
android·java·linux
无足鸟ICT18 小时前
【RHCA+】dstat命令(监控系统资源)
linux·服务器
时空无限18 小时前
ubuntu 26.04 sudo 连不上主机卡住然后失败问题处理
linux·服务器·ubuntu
qq7621182218 小时前
Ubuntu20.04
ubuntu
路溪非溪19 小时前
C++标准库之智能指针
linux·开发语言·c++
程序员大雄学编程19 小时前
Linux 磁盘满了怎么排查?df / du / find 三步定位大文件
linux·运维·php
RuoyiOffice19 小时前
Hyper-V+Kubernetes 搭建实战:保留 Windows,构建三节点 Linux 容器集群
linux·spring boot·kubernetes·containerd·hyper-v·微服务部署·ruoyi office
承渊政道19 小时前
Linux网络学习【五种IO模型与⾮阻塞IO】
linux·网络·学习·ubuntu·io模型·非阻塞io