Linux 进程管理 ps、top、kill

进程管理

命令描述
ps查看瞬间进程的状态
top实时监测进程

进程字段名

image

字段说明
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

image

进程的状态
O:正在运行
S:在休眠
R:可运行,正等待运行
Z:僵化,进程已结束但父进程已不存在
T:停止

进程的优先级数字越大优先级越低。

案例2:列出目前所有的正在内存当中的程序(最常用)**

[ranan@MPI0 ~]$ ps -aux

image

案例3:显示所有进程信息,连同命令行

[ranan@MPI0 ~]$ ps -ef

实时监测进程top

语法:top [选项]

选项
-d delay:改变显示的更新速度,指定每两次屏幕信息刷新的时间间隔,单位是s
-p PID: 指定监测进程的ID,仅监测该进程
-i:使top不显示任何闲置或者僵死进程
-s:使top命令在安全模式中运行,这将去除交互命令所带来的潜在危险
-u username:指定显示该用户的进程
-n num:刷新特定的次数后退出

image

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

image

结束进程

Linux中,进程之间通过信号来通信。

Linux进程信号

信号名称描述
1HUP挂起,也会造成某些进程在没有终止的情况下重新初始化。
2INT中断,相当于用键盘输入 [ctrl]-c 来中断一个程序的进行。
3QUIT结束运行
9KILL无条件终止,代表强制中断一个程序的进行,如果该程序进行到一半,那么尚未完成的部分可能会有“半产品”产生,类似 vim会有 .filename.swp 保留下来。
11SEGV段错误
15TREM尽可能终止,以正常的方式来终止该程序。由于是正常的终止,所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时,输入这个 signal 也是没有用的。
17STOP无条件停止运行,但不终止,相当于用键盘输入 [ctrl]-z 来暂停一个程序的进行。
18TSTP停止或暂停、但继续在后台运行
19CONT在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开头的进程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值