Linux 进程管理 kill、killall、pkill命令

Linux经常使用信号(进程间通讯) 

系统中能够识别的信号较多,咱们可使用命令"kill -l"或"man 7 signal"来查询。命令以下:apache

[root@localhost ~]# 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    

常见的进程信号最重要的就是 "1"、"9"、"15"这三个信号 bash

信号代号 信号名称 说 明
1 SIGHUP 该信号让进程当即关闭.而后从新读取配置文件以后重启
2 SIGINT 程序停止信号,用于停止前台进程。至关于输出 Ctrl+C 快捷键
8 SIGFPE 在发生致命的算术运算错误时发出。不只包括浮点运算错误,还包括溢出及除数为 0 等其余全部的算术运算错误
9 SIGKILL 用来当即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制停止进程
14 SIGALRM 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号
15 SIGTERM

正常结束进程的信号,kill 命令的默认信号。ssh

若是进程已经发生了问题,那么这个信号是没法正常停止进程的,这时咱们才会尝试 SIGKILL信号(信号 9) 函数

18 SIGCONT 该信号可让暂停的进程恢复执行。本信号不能被阻断
19 SIGSTOP 该信号能够暂停前台进程,至关于输入 Ctrl+Z 快捷键。本信号不能被阻断

kill命令:终止进程

kill是用来杀死进程的命令。能够根据不一样的信号,kill 命令能够完成不一样的操做,默认信号是15,正常中止。kill 命令格式以下:spa

[root@localhost ~]# kill [信号] PID

kill 命令是按照 PID 来肯定进程的,因此 kill 命令只能识别 PID,而不能识别进程名。咱们举几个例子来讲明一下 kill 命令。code

使用“-1”信号,让进程重启

[root@localhost ~]# kill -1 进程号

 使用“-19”信号,让进程暂停

[root@localhost ~]# kill -19 进程号

killall命令:终止特定的一类进程

killall 命令再也不依靠 PID 来杀死单个进程,而是经过程序的进程名来杀死一类进程。命令格式以下:blog

[root@localhost ~]# killall [选项] [信号] 进程名

选项:进程

  • -i:交互式,询问是否要杀死某个进程;
  • -l:忽略进程名的大小写;

杀死httpd进程

#启动RPM包默认安装的apache服务
[root@localhost ~]# service httpd start
#查看httpd进程
[root@localhost ~]# ps aux | grep "httpd" | grep -v "grep"
root 1600 0.0 0.2 4520 1696? Ss 19:42 0:00 /usr/local/apache2/bin/httpd -k start
daemon 1601 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start
daemon 1602 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start
daemon 1603 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start
daemon 1604 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start
daemon 1605 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start                                                              
#杀死全部进程名是httpd的进程
[root@localhost ~]# killall httpd
#查询发现全部的httpd进程都消失了
[root@localhost ~]# ps aux | grep "httpd" | grep -v "grep"

 交互式杀死sshd进程

#查询系统中有3个sshd进程。1733是sshd服务的进程,1735和1758是两个远程链接的进程                                                                           
[root@localhost ~]# ps aux | grep "sshd" | grep -v "grep"
root 1733 0.0 0.1 8508 1008? Ss 19:47 0:00/usr/sbin/sshd
root 1735 0.1 0.5 11452 3296? Ss 19:47 0:00 sshd: root@pts/0
root 1758 0.1 0.5 11452 3296? Ss 19:47 0:00 sshd: root@pts/1
#交互式杀死sshd进程
[root@localhost ~]# killall -i sshd
#这个进程是sshd的服务进程,若是杀死,那么全部的sshd链接都不能登录
杀死sshd(1733)?(y/N)n
#这是当前登陆终端,不能杀死我本身吧
杀死 sshd(1735)?(y/N)n
#杀死另外一个sshd登录终端
杀死 sshd(1758)?(y/N)y

pkill命令:终止进程,按终端号踢出用户

pkill 命令和 killall 命令很是相似,也是按照进程名来杀死进程的。命令格式以下:table

[root@localhost ~]# pkill [选项] [信号] 进程名

选项:class

  • -t 终端号:按照终端号踢出用户;

不过 pkill 命令能够按照终端号来踢出用户。不知道你们发现没有,刚刚经过 killall 命令杀死 sshd 进程的方式来踢出用户,很是容易误杀死进程,要么会把 sshd 服务杀死,要么会把本身的登陆终端杀死。

因此,不论是使用 kill 命令按照 PID 杀死登陆进程,仍是使用 killall 命令按照进程名杀死登陆进程,都是很是容易误杀死进程的。 具体命令以下:

#使用w命令査询本机已经登陆的用户
[root@localhost ~]# w
20:06:34 up 28 min, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root ttyl - 19:47 18:52 0.01s 0.01s -bash
root pts/0 192.168.0.100 19:47 0.00s 0.09s 0.04s w
root pts/1 192.168.0.100 19:51 14:56 0.02s 0.02s -bash
#当前主机已经登陆了三个root用户,一个是本地终端ttyl登陆,另外两个是从192.168.0.100登录的远程登陆                                                            
#强制杀死从pts/1虚拟终端登录的进程
[root@localhost ~]# pkill -9 -t pts/1
#虚拟终端pts/1的登陆进程已经被杀死了
[root@localhost ~]# w
20:09:09 up 30 min, 2 users, load average: 0.00, 0.00,0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root ttyl - 19:47 21:27 0.01s 0.01s -bash
root pts/0 192.168.0.100 19:47 0.00s 0.06s 0.00s w
相关文章
相关标签/搜索