Linux 进程入门
1. 基本概念
1.1 概述
进程(process)可以看做是系统正在运行的程序。是正在执行的一个程序或者命令。
**进程是资源管理的最小单位,线程是系统调度的最小单位。**一个进程可以拥有多个线程。多个进程之间的资源是相互独立的,一个进程的多个线
程共享这个进程的大多数资源。
每一个进程都是一个运行的实体,都有自己的地址空间,并占用一 定的系统资源。
1.2 进程占用资源
进程的运行会占用 4 类资源:CPU、memory、disk、network。
-
CPU(Central Processing Unit 中央处理单元 ):lscpu 命令可以查看 CPU 的详细信息。
-
Memory(内存):free -h 命令可以查看系统内存大小。
-
Disk(磁盘):df -h 命令可以查看磁盘大小。
-
network(网络):netstat -a 命令可以查看系统中所有网络连接。
2. 进程管理
进程管理可以判断系统的健康状态,查看系统的所有进程,也可以结束相应的进程。
2.1 ps aux(查看当前时间节点进程信息)
ps aux | grep disnox(表示查找disnox用户使用的进程)
- USER:该进程是由那个用户产生的。
- PID:进程的ID编号。
- %CPU:该进程的CPU资源占用百分比。
- %MEM:该进程的内存资源占用百分比。
- VSZ:该进程的虚拟内存的大小,单位KB(将磁盘的一部分空间转为虚拟内存使用,在物理内存使用占满后才会用到)。
- RSS:该进程占用实际物理内存的大小,单位KB。
- TTY:该进程是在哪个终端上运行的(TTY1-6代表本地控制台终端。TTY1是图形终端,TTY2-6是本地的字符界面终端。PTS/0-255代表虚拟终端)。
- STAT:进程状态。R:运行、S:睡眠、T:停止、s:包含子进程、+:位于后台。
- START:该进程启动时间。
- TIME:该进程占用系统得到运算时间(注意不是系统时间)。
- COMMAND:产生此进程的命令名
2.2 pstree(查看进程树,可以直观的看出父进程与子进程的关系)
pstree -p(将进程树全部展开,查看到对应的PID)
2.3 top(表示进入监听模式,该命令可以动态显示进程的信息变化)
- top -h:显示帮助
- top -P:以cpu进行排序
- top -M:以内存排序
- top -N:以PID排序
- 输入q可以退出
-
第一行是系统信息:21:25:01 是系统时间,Up 6:32是系统运行时间,1 user是系统当前登录用户数量。
-
第二行是进程信息:Tasks:231 total 表示系统进程总数,running 表示正 在运行的进程,sleeping 表示睡眠的进程,stopped 表示已停止的进程,zombie 表示僵尸进程(如果不是0,需要手动检查)。
-
第三行是 cpu 信息:us 表示用户占用cpu百分比,sy 表示系统占用 cpu 百分比,ni 表示改变过优先级的用户占用百分比。id 表示空闲cpu占用百分比,wa 表示等待输入/输出的进程占用百分比,hi 表示硬件中断请求服务占用百分比,si 表示软件中断请求服务占用百分比,st表示steal time虚拟时间百分比,就是当有虚拟机时虚拟 cpu 等待实体 cpu 的时间百分比。
-
第四行是物理内存信息:Mem 表示物理内存总量,used 表示以使用的物理内存,free 表示闲置物理内存,buffers 表示缓冲数量。
-
第五行是交换分区(swap)信息:swap 表示交换分区(虚拟内存)的在大小,used 表示已经使用的交互分区的大小,free表示空闲交换分区的大小,cached 表示作为缓存的交换分区大小。
2.4 kill(查看终止进程命令)
kill -l(查看 kill 后面所相应的参数)
-
SIGHUP, 该信号让进程⽴即关闭,然后重新读取配置⽂件之后重启
-
SIGINT ,程序终⽌信号,⽤户终⽌前台进程。相当去输出ctrl+c快捷键
-
SIGKILL, ⽤来⽴即结束程序的运⾏,本信号不能被阻塞、忽略。⼀般 ⽤于强制终⽌进程
-
SIGCONT, 信号可以让暂停的进程恢复执⾏,本信号不能被阻断
-
SIGSTOP ,该信号可以暂停前台 进程,相当于输⼊crtl+z快捷键。本信号 不能被阻断
使用 kill命令终止进程
- kill -1 32411 (重启PID为32411的进程)
- kill -9 32425(强制终⽌PID为32425的进程)
- kill -15 32452(相当于kill 32452,正常结束PID为32452的进程)
3. 进程与程序
3.1 进程和程序(文件)的区别
- 程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念。
- 进程是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡。
3.2 进程和程序的关系
程序包含指令和用户数据,当执行一个程序时,系统将程序中的指令和数据加载到内存,作为进程运行的基本材料,但是进程在运行时将会产生诸如CPU的所有寄存器值,以及存储临时数据的进程堆栈等动态信息。
3.3 进程控制块(PCB)
4. 进程组织方式
进程是一个动态的过程,可以诞生,也可以杀死。每一个进程必然有一个父进程,可以通过 pstree 去查看整个系统的进程关系。
disnox@MSI:/mnt/e/Data/yueq/code$ pstree // vscode
init─┬─init───bash
└─init ───bash───pstree
pstree 是一个用“树状”方式查看当前系统所有进程关系的命令,可以明显看到他们的关系就像人类社会的族谱,大家都有一个共同的祖先 init,每个人都可以生出几个孩子(进程没有性别,自己一个人就能生!)。其中祖先 init是一个非常特别的进程,他没有父进程。
每个进程都有自己的身份证号码(PID),PID是重要的系统资源,它是用以区分各个进程的基本依据。可以使用 **ps (ps -ef | more)**命令来查看进程的 PID。
disnox@MSI:/mnt/e/Data/yueq/code$ ps -ef | more // vscode
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 20:46 ? 00:00:00 /init
root 10 1 0 20:46 tty2 00:00:00 /init
nox 11 10 0 20:46 tty2 00:00:00 -bash
root 60 1 0 21:46 tty1 00:00:00 /init
nox 61 60 0 21:46 tty1 00:00:00 -bash
nox 88 61 0 21:51 tty1 00:00:00 ps -ef
nox 89 61 0 21:51 tty1 00:00:00 more
第 2 列就是该进程的 PID,第三列 PPID 就是每个进程的父进程的 PID。
5. 进程状态
-
执行态(RUNNING):进程正在占有CPU。
-
就绪态(RUNNING): 进程处于等待队列中等待调度。
-
浅睡眠(INTERRUPTABLE):此时进程在等待一个事件的发生或某种系统资源,可响应信号。
-
深睡眠(UNINTERRUPTABLE):此时进程在等待一个事件的发生或某种系统资源,无法响应信号。
-
停止态(STOPPED):此时进程被暂停。
-
僵尸态(ZOMBIE):此时进程不能被调度,但是PCB未被释放。死亡态(DEAD):这是一个已终止的进程,且PCB将会被释放。