fork,进程状态

223 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情


如何获得进程id

getpid 该进程的id getppid父进程id 杀死进程,kill -9 进程

fork

关于它的返回值

  1. 创建失败返回-1
  2. 创建成功:给父进程返回子进程的pid,给子进程返回0

image.png 在运行带有含义fork代码的时候,此时的父进程已经在运行队列中了,当开始执行fork创建子进程的时候,此时fork已经把子进程的相关属性都已经完成,此时子进程的返回值的id也已经完成,并且把子进程放入运行队列。(理解可能不对)

进程的状态

新建状态:字面意思 运行状态:进程在运行队列中排队,就是运行状态 阻塞状态:等待非cpu状态就绪,为阻塞状态 挂起状态:当内存不足的时候,os通过适当的置换进程的代码和数据到磁盘,进程的状态就叫做挂起

Linux下的进程状态

R运行状态

S(睡眠状态):进程在等待事件的完成。可中断睡眠 当用printf等函数访问外设的时候,由于访问外设的速度小于cpu的速度,在访问非cpu状态的时候,不会立即被cpu调度,就会显示S状态。 进程后面的加号+表示前台进程,前台进程占领的是bsh的对话框,此时输入命令或者什么东西都没有用。可以在运行程序的时候在后面加上一个&,表示在后台运行该程序,就没有+了,比如 ./myproc &然后后面会显示它的pid。

D:睡眠状态,磁盘睡眠,深度睡眠,不可中断睡眠,不可以被动唤醒

T(暂停状态)kill -19 发送19号信号,把进程会暂停,发送18号信号,让他继续运行 还有一个是调试时打断点就是一种暂停状态(可能显示的是t),

X:终止状态,被操作系统回收

Z:僵尸状态

什么是Z状态: 一个进程已经退出,但是还不允许被操作系统释放,处于一个被检测的状态——僵尸状态。比如一个人死亡,要求判断他是怎么死的

维持该状态是为了让父进程或者os进行回收