一、查看进程
在根目录下的/proc中存放所有的进程。
进程PCB启动时会记录当前自己的可执行程序路径,默认是在当前路径,查看可用指令ll/proc/pid其中的cwd就是当前工作路径。
要修改工作路径可以用chdir(const char* path)函数来实现。
二、进程状态
1、Linux的进程状态
在struct task_struct中有一个int status来表示该进程的状态,更改进程状态就是更改该参数即可。
2、进程状态介绍
R(running):运行,在运行队列中。
S(sleeping):休眠,一般是等待资源就绪,或者是可中断睡眠。
D(disk stop):深度睡眠,不可被删,也不可中断睡眠,只有进程自己醒来或者重启。
T(stopped):停止,等待被运行。
t(tracing stop):被追踪而停止,例如调试到断点处。
X(dead):死亡,进程结束释放完资源就死亡。
Z(zombie):僵尸进程,当子进程已经结束,但是父进程还未结束,子进程的资源没法被原来的父进程释放就是僵尸进程,这样就会导致内存泄漏。
孤儿进程:当父进程已经结束,子进程还未结束就是孤儿进程,这时候就会被bash领养保证资源正常释放。
直接在命令行中启动的进程的父进程是bash
三、进程的阻塞,挂起和运行
1、运行,并发,并行
(1)运行
进程在CPU的运行队列中就是处在运行状态。
(2)并发
一个进程一旦持有CPU不会一直运行到进程结束,会基于时间片进行轮转调度,如果超时就会被放到运行队尾。让多个进程切换,在一段时间内同时推进代码就叫做并发。
(3)并行
任何时刻都有多个进程在运行就是并行。例如有多个CPU在工作。
2、阻塞
在Linux中通常表现为S/D,也就是浅/深睡眠。
定义
把进程从运行队列中剥离,放入到设备等待队列中,等待资源就绪,叫阻塞状态。放到运行队列中就是唤醒。
阻塞和运行的状态切换往往伴随着PCB被链入到不同的队列中,入队列的不包括代码和数据,只有task_struct
3、挂起
本质就是把代码和数据放到外设,等待资源就绪后再换入。
目的是节省内存资源,但是频繁地换入换出会影响效率。