文章目录
进程管理
命令 | 描述 |
---|---|
ps | 查看瞬间进程的状态 |
top | 实时监测进程 |
进程字段名
字段 | 说明 |
---|---|
PID | 程序的进程ID |
USER | 进程属于哪个用户 |
PR | 进程的优先级 |
NI | 进程的谦让度值 |
VIRT | 进程占用的虚拟内存总量 |
RES | 进程占用的物理内存总量 |
SHR | 进程和其他进程共享的内存总量 |
s | 进程的状态 |
%CPU | 进程使用的CPU时间比例 |
%MEM | 进程使用的内存占可用内存的比例 |
TIME | 进程已用CPU时间 |
CMD | 正在执行的命令或进程名 |
进程的状态
类型 | 符号 | 说明 |
---|---|---|
可执行状态 | R(TASK_RUNNING) | 运行状态和就绪状态的合并,表示进程正在运行或准备运行 |
浅度睡眠状态 | s(TASK_INTERRUPTIBLE) | 进程正在睡眠(被阻塞),等待资源的到来是唤醒,也可以通过其他进程信号或时钟中断唤醒 |
深度睡眠状态 | D(TASK_UNINTERRUPTIBLE) | 和浅度睡眠基本类似,但不可被其他进程信号或时钟中断唤醒,不可以被kill掉 |
僵死状态 | Z(TASK_DEAD - EXIT_ZOMBIE) | 进程已经结束但未释放进程控制块(PCB),进程已结束但父进程已不存在 |
退出状态 | X(TASK_DEAD - EXIT_DEAD) | 进程即将被销毁 |
暂停状态或跟踪状态 | T(TASK_STOPPED or TASK_TRACED) | TASK_STOPPED状态下,进程可以被SIGCONT信号唤醒,而TASK_TRACED下进程不能被该信号唤醒。TASK_TRACED状态通常发生在调试时,进程在断点处停下来,此时即被跟踪,只有当完成调试时,才能返回TASK_RUNNING状态。 |
查看进程ps(Process Status)
ps用来查看目前系统中,有哪些程序正在执行,以及他们执行的状况。
显示瞬间进程的状态,并不动态连续
默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程
[ranan@MPI0 ~]$ ps
PID TTY TIME CMD
38603 pts/1 00:00:00 bash
38888 pts/1 00:00:00 tail
39148 pts/1 00:00:00 ps
语法
ps [选项]
Linux系统中使用的GNU ps命令支持3中不同类型的命令行参数
- Unix风格的参数,前面加单破折号
- BSD风格的参数,前面不加单破折号
- GUN风格的长参数,前面加双破折号
Unix风格的参数
参数 | 描述 |
---|---|
-a | 显示除控制进程和无终端进程外的所有进程信息 |
-x | 显示后台进程运行的参数 |
-e/-A | 显示所有进程 |
-f | 显示完整格式的输出,全格式,显示父进程 |
-l | 显示长列表 |
-u 用户名 | 查看特定用户的进程情况 |
BSD风格的参数
参数|描述
- | -
u|以用户为主的格式来显示进程状况。
x|显示所有进程,包括未分配任何中断的进程
GNU风格的参数
GNU复制了现有的其他类型参数,还加入了新功能
参数|描述
- | -
–sort oeder|指定输出按哪列排序
–forest | 用层级结构显示除进程与父进程的关系
案例1:将目前属于本用户这次登入的 PID 与相关信息列示出来
[ranan@hadoop102 ~]$ ps -l
进程的状态
O:正在运行
S:在休眠
R:可运行,正等待运行
Z:僵化,进程已结束但父进程已不存在
T:停止
进程的优先级数字越大优先级越低。
案例2:列出目前所有的正在内存当中的程序(最常用)**
[ranan@MPI0 ~]$ ps -aux
案例3:显示所有进程信息,连同命令行
[ranan@MPI0 ~]$ ps -ef
实时监测进程top
语法:top [选项]
选项
-d delay:改变显示的更新速度,指定每两次屏幕信息刷新的时间间隔,单位是s
-p PID: 指定监测进程的ID,仅监测该进程
-i:使top不显示任何闲置或者僵死进程
-s:使top命令在安全模式中运行,这将去除交互命令所带来的潜在危险
-u username:指定显示该用户的进程
-n num:刷新特定的次数后退出
1.平均负载值越大说明系统的负载越高。由于进程短期的突发性活动,最近1分钟的出现高负载值也很正常,但如果近15分钟内的平均负载都很高,说明系统可能有问题。通常如果系统的负载值超过了2,就说明系统比较繁忙。
2.默认情况下,top命令在启动时会按照%CPU值对进程进行排序,可以在top运行时使用交互命令重新排序。
交互操作
命令 | 描述 |
---|---|
P | 以CPU使用率排序,默认 |
M | 以内存的使用率降序排序 |
N | 以PID降序排序 |
q | 退出top |
c | 显示整个命令行而不只是显示命令名 |
u uername | 输入用户名后,只检测该用户的进程 |
k PID | 结束该PID进程 |
案例
1.每2s显示所有进程的资源占用情况
[ranan@MPI0 ~]$ top -d 2
2.每5s显示进程的资源占用情况,并显示进程的命令行参数,默认只有进程名
[ranan@MPI0 ~]$ top -c
结束进程
Linux中,进程之间通过信号来通信。
Linux进程信号
信号 | 名称 | 描述 |
---|---|---|
1 | HUP | 挂起,也会造成某些进程在没有终止的情况下重新初始化。 |
2 | INT | 中断,相当于用键盘输入 [ctrl]-c 来中断一个程序的进行。 |
3 | QUIT | 结束运行 |
9 | KILL | 无条件终止,代表强制中断一个程序的进行,如果该程序进行到一半,那么尚未完成的部分可能会有“半产品”产生,类似 vim会有 .filename.swp 保留下来。 |
11 | SEGV | 段错误 |
15 | TREM | 尽可能终止,以正常的方式来终止该程序。由于是正常的终止,所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时,输入这个 signal 也是没有用的。 |
17 | STOP | 无条件停止运行,但不终止,相当于用键盘输入 [ctrl]-z 来暂停一个程序的进行。 |
18 | TSTP | 停止或暂停、但继续在后台运行 |
19 | CONT | 在STOP或TSTP之后恢复执行 |
在Linux上有两个命令可以向运行中的进程发出进程信号
- kill命令
- killall命令
这两个命令通常和ps结合使用
kill命令
语法:kill [选项] PID[,PID1,PID2…]
kill 是向进程发送信号的命令
默认情况下,kill命令会向命令行中列出的全部PID发送一个TERM命令,进程正常退出-按应用程序自己的退出流程完成退出,这样就可以清理并释放资源。
发送进程信号,必须是进程的属主或root用户
选项
-l 信号编号:显示信号编号的信号,不加则显示所有信号
[ranan@MPI0 ~]$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[ranan@MPI0 ~]$ kill -l 5
TRAP
-s 信号名称或编号:指定要发出的信号
kill -s HUP 3940
kill -9 3940 # 可以直接 -信号
使用 kill 命令一定可以终止一个进程吗?
答案是否定的。kill 命令只是“发送”一个信号,因此,只有当信号被程序成功“捕获”,系统才会执行 kill 命令指定的操作;反之,如果信号被“封锁”或者“忽略”,则 kill 命令将会失效。
常用命令
这条命令发信号让进程正常退出。所谓的正常退出是指按应用程序自己的退出流程完成退出,这样就可以清理并释放资源。比如 vim 程序,如果是正常的退出,就会删除掉临时文件 *.swp。
kill pid
进程出现了异常状况,不能通过信号15正常退出时,我们就需要通过非常的手段直接终结掉进程。
这样结束掉的进程不会进行资源的清理工作,所以如果你用它来终结掉 vim 的进程,就会发现临时文件 *.swp 没有被删除。
kill -9 pid
killall命令
killall [选项] [进程名]
选项
-Z 只杀死拥有scontext 的进程
-e 要求匹配进程名称
-I 忽略小写
-g 杀死进程组而不是进程
-i 交互模式,杀死进程前先询问用户
-l 列出所有的已知信号名称
-q 不输出警告信息
-s 发送指定的信号,同kill使用方法一样
-v 报告信号是否成功发送
-w 等待进程死亡
-u 用户名:向该用户所运行的所有进程发送信号
支持通过进程名来终止进程,也支持通配符,在系统负载过大而变得慢时很有用
killall -9 player # 杀掉player进程
killall http* # 结束http开头的进程