- ps
- kill
kill
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
-l
<信息编号> 若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。-s
<信息名称或编号> 指定要送出的信息。- [程序] [程序]可以是程序的PID或是PGID,也可以是工作编号。
使用 kill -l 命令列出所有可用信号。
HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2
ps: 因为我是用 macbook
输出的这些,所以,相对于 linux
难免有一些遗漏。
最常用的信号是:
- 1 (HUP):重新加载进程。
- 9 (KILL):杀死一个进程。
- 15 (TERM):正常停止一个进程。
实例
杀死进程
kill 12345
强制杀死进程
kill -KILL 123456
发送SIGHUP信号,可以使用一下信号
kill -HUP pid
彻底杀死进程
kill -9 123456
杀死指定用户所有进程
1 | kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程 |
一般我们杀死一个进程都建议确定其进程的 PID
,这是因为,不使用这个的话,可能会误伤程序。
另外上面那个杀死 linux
用户的进程,比如说
1 | kill $(ps -ef | grep python) |
这虽然能杀死相关的程序,但是,并不意味着,这是正确的,这是因为
ps -ef | grep python
会返回一些 pid
,这样的话, kill
又具备可以连续杀死进程的特征,所以,可以一直执行。
我运行上面的例子,会返回
1 | kill: kill 501 failed: no such process |
ps
ps
命令有多种不同的使用方法,这常常给初学者带来困惑。在各种 Linux
论坛上,询问 ps
命令语法的帖子屡见不鲜,而出现这样的情况,还要归咎于 UNIX
悠久的历史和庞大的派系。在不同的 Linux
发行版上,ps
命令的语法各不相同,为此,Linux
采取了一个折中的方法,即融合各种不同的风格,兼顾那些已经习惯了其它系统上使用 ps
命令的用户。
由于,ps
的流派实在是太多了,所以在这里只给出一些常用的参数和用法。
另外,有的 ps
的命令可以加 -
有的不可以加,在各种博文中也说的不同,就是因为流派实在是太多。
ps aux
查看系统中所有的进程,使用 BS
操作系统格式
a
:显示一个终端的所有进程,除会话引线外;- 这里终端的意思不是,不是单独的指你的单独
shell
窗口,我觉得是你开了电脑后,你所使用的这个电脑被称为一个终端,这个终端所有运行的进程
- 这里终端的意思不是,不是单独的指你的单独
u
:显示进程的归属用户及内存的使用情况;x
:显示没有控制终端的进程;
ps: ps
命令有些与众不同,它的部分选项不能加入"-"
,比如命令"ps aux"
,其中"aux"
是选项,但是前面不能带“-”
。
1 | [root@localhost ~]# ps aux |
表头 | 含义 |
---|---|
USER | 该进程是由哪个用户产生的。 |
PID | 进程的 ID。 |
%CPU | 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。 |
%MEM | 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。 |
VSZ | 该进程占用虚拟内存的大小,单位为 KB。 |
RSS | 该进程占用实际物理内存的大小,单位为 KB。 |
TTY | 该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 |
STAT | 进程状态。常见的状态有以下几种: -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。 -R:该进程正在运行。 -S:该进程处于睡眠状态,可被唤醒。 -T:停止状态,可能是在后台暂停或进程处于除错状态。 -W:内存交互状态(从 2.6 内核开始无效)。 -X:死掉的进程(应该不会出现)。 -Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。 -<:高优先级(以下状态在 BSD 格式中出现)。 -N:低优先级。 -L:被锁入内存。 -s:包含子进程。 -l:多线程(小写 L)。 -+:位于后台。 |
START | 该进程的启动时间。 |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间。 |
COMMAND | 产生此进程的命令名。 |
ps -le
-A
和 -e
是一个作用,不过 -e
好记。
-l
:长格式显示更加详细的信息;-e
:显示所有进程;
ax
等价于 -e
ps aux
命令可以看到系统中所有的进程,ps -le
命令也能看到系统中所有的进程。由于 -l
选项的作用,所以 ps -le
命令能够看到更加详细的信息,比如父进程的 PID
、优先级等。但是这两个命令的基本作用是一致的,掌握其中一个就足够了。
有的时候还会加上 -f
,这个选项是输出更多的信息,还不如 -l
。
1 | [root@localhost ~]# ps -le |
表头 | 含义 |
---|---|
F | 进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行; 4:进程使用超级用户权限; |
S | 进程状态。具体的状态和”psaux”命令中的 STAT 状态一致; |
UID | 运行此进程的用户的 ID; |
PID | 进程的 ID; |
PPID | 父进程的 ID; |
C | 该进程的 CPU 使用率,单位是百分比; |
PRI | 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行; |
NI | 进程的优先级,数值越小,该进程越早被执行; |
ADDR | 该进程在内存的哪个位置; |
SZ | 该进程占用多大内存; |
WCHAN | 该进程是否运行。”-“代表正在运行; |
TTY | 该进程由哪个终端产生; |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间; |
CMD | 产生此进程的命令名; |
ps -l
只能看到当前登录产生的进程;
如果不想看到所有的进程,只想查看一下当前登录产生了哪些进程,那只需使用 ps -l
命令就足够了:
1 | [root@localhost ~]# ps -l |
僵尸进程
。僵尸进程的产生一般是由于进程非正常停止或程序编写错误,导致子进程先于父进程结束,而父进程又没有正确地回收子进程,从而造成子进程一直存在于内存当中,这就是僵尸进程。
僵尸进程会对主机的稳定性产生影响,所以,在产生僵尸进程后,一定要对产生僵尸进程的软件进行优化,避免一直产生僵尸进程;对于已经产生的僵尸进程,可以在查找出来之后强制中止。