一、关于进程
1、四个容易搞混的概念:
- 源码文件:.c;.cpp等程序员在编译器上手敲的代码。
- 程序:使用编译器将源码编程为计算机能够识别并执行的二进制文件(.exe,a.out),是存储在磁盘上的可执行的二进制文件;
- 进程: 运行中的程序,将二进制可执行文件加载到内存上,然后由CPU执行其中的一些指令,整个执行的过程,将其称之为进程。
- 结果:进程执行的过程中输出的数据。
2、程序如何加载到内存上成为一个进程:
在Linux上,bash进程会调用fork函数创建一个新的进程,然后新的进程调用execve()系统调用执行指定的ELF文件,原先bash进程继续返回等待刚才启动的新进程结束。然后等待用户输入命令。详细了解可以去看《程序员自我修养》第六章。
3、操作系统如何表示以及管理进程:
操作系统会将进程的相关属性记录下来,通过属性值的变化就能够描述进程正在执行或其他状态,操作系统为每一个进程分配一个PCB进程控制块是一个结构体变量,其中就包含PID进程编号(唯一标识符)等信息。
二、查看进程命令
任何命令都可以通过【man 命令】这个指令来查看命令的帮助手册,里面有详细用法,我们在此只介绍一些常用的进程命令。
(一)ps
ps命令可以单独使用,也可以在后面加上其他参数,或者和管道等命令结合。那么我们先看看它后面常跟的参数:
参数 | 含义 |
---|---|
a | 显示现行终端机下的所有进程,包括其他用户的进程; |
u | 显示进程拥有者、状态、资源占用等的详细信息(注意有“-”和无“-”的区别) |
x | 显示没有控制终端的进程。通常与 a 这个参数一起使用,可列出较完整信息; |
-e | 显示所有进程 |
-f | 完整输出显示进程之间的父子关系 |
-l | 较长、较详细的将该 PID 的的信息列出 |
-L | 显示线程信息 |
-o | 自定义显示的字段 |
grep sth |
当然这些参数也可以组合,如ps aux等命令。
我们对部分命令进行演示,并了解产生结果的参数含义:
1. ps 单独使用:显示所有进程
参数显示说明:
- PID是进程编号(唯一标识)
- TTY终端号:终端名/第几个终端(从0开始编号)。
- TIME:不是程序运行到现在的时间而是当前执行PS时进程执行的时间;
- CMD:表示这个进程可以通过哪个命令调动执行。
- bash:终端对应的进程,打开一个终端后有这个进程。所以会显示两个进程,一个是bash,一个是ps。
2、ps -e:显示所有进程,包括不同用户和终端上的,ps -a只显示当前终端的
从上图我们可以看到这两个命令的区别。
3. ps -f:显示进程的父子关系
可以看到ps -f这个进程是由bash终端创建的,bash是它的父进程。
4. ps -L :显示当前终端的线程
LWP参数表示线程唯一标识的id。
5. ps -Le:显示所有线程详细信息
6. ps -aux:参数组合,显示终端所有进程的详细信息
参数显示说明:
- USER:表示用户
- %CPU:CPU占用率
- %MEM:内存占用率
- VSZ:虚拟内存占用多少
- RSS:实际内存多少
- STAT:状态,Ss为睡眠,T挂起,R+运行
- START:启用时间
7、ps -ef | grep gripure:只显示Gripure用户进程
这样我们通过管道就可以过滤掉不需要的信息,只显示我们感兴趣的,避免我们找进程。
(二)top
这个类似windows上的资源管理器。
- top 命令执行后,数据会一直变化。
最上面是总体使用信息,包含tasks是任务数,很详细的分了运行,睡眠,停止,僵死;cpus是cpu使用情况;Mem是内存使用状况;swap为交换分区(内存不够用时使用);下面的参数PR是优先级,其他参数上面均有说明;
- 输入f可以修改显示信息:根据A~S编号,我们可以输入编号,进行信息修改,输入1退出修改,回到top。
- 输入q退出top。
(三)pstree
以树状图的样子显示进程,可以清晰看到进程关系。
(四)jobs
jobs查看后台执行的进程,通过jobs显示任务,前面为任务号,状态,命令,查看挂起的进程。
三、前台&&后台运行进程命令
1、&: 如果执行一个命令或者一个程序时,在其后加一个&,则将执行的进程放到后台运行。
如:
sleep 2,终端会等待2s,无法解析其他命令。2s过后会解析。
sleep 2 &,这时终端不需要等待它结束,可以解析其他命令。
2. fg +任务号//把任务放到前台执行,需要先通过jobs得到任务号。
3. bg +任务号//将挂起的进程放到后台执行,首先我们要用jobs或ps -u查看是否为挂起的进程,如果是我们再bg。
四、挂起后台进程命令
1、kill -stop pid//挂起进程,将进程暂停
2. 查看挂起的进程:这时我们可以通过jobs显示任务,前面为任务号,状态,命令,查看挂起的进程
3. 或者通过ps u,查看详细信息,STAT为状态:Ss为睡眠,T挂起,R+运行
五、结束进程命令
1、kill :结束一个进程 kill pid
2. kill无法结束挂起的进程,这时我们需要:kill -9 pid//强制结束进程
3. pkill 命令//关闭一组由这个命令创建的进程
加油哦!💪。