killall 、kill 、pkill 命令区别

killall 命令Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)。咱们可使用kill命令杀死指定进程PID的进程,若是要找到咱们须要杀死的进程,
咱们还须要在以前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。

1.命令格式python

killall [参数] [进程名]

2.命令参数linux

-Z 只杀死拥有scontext 的进程
-e 要求匹配进程名称
-I 忽略小写
-g 杀死进程组而不是进程
-i 交互模式,杀死进程前先询问用户
-l 列出全部的已知信号名称
-q 不输出警告信息
-s 发送指定的信号
-v 报告信号是否成功发送
-w 等待进程死亡
–help 显示帮助信息
–version 显示版本显示

3.范例nginx

1:杀死全部同名进程 killall nginx killall -9 bash2.向进程发送指定信号 killall -TERM ngixn 或者 killall -KILL nginx

KILL 命令shell

Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的经常使用命令。一般,终止一个前台进程可使用Ctrl+C键,可是,对于一个后台进程就须用kill命令来终止,咱们就须要先使用ps/pidof/pstree/top等工具获取进程PID,而后使用kill命令来杀掉该进程。kill命令是经过向进程发送指定的信号来结束相应进程的。在默认状况下,采用编号为15的TERM信号。TERM信号将终止全部不能捕获该信号的进程。对于那些能够捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。

1.命令格式apache

kill [参数] [进程id]

2.命令参数django

-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出所有的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
一、kill命令能够带信号号码选项,也能够不带。若是没有信号号码,kill命令就会发出终止信号(15),这个信号能够被进程捕获,使得进程在退出以前能够清理并释放资源。也能够用kill向进程发送特定的信号。例如:kill -2 123
  • 1
它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。可是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。二、kill能够带有进程ID号做为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。若是试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会获得一个错误信息。三、能够向多个进程发信号或终止它们。四、当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会立刻显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。五、应注意,信号使进程强行终止,这常会带来一些反作用,如数据丢失或者终端没法恢复到正常状态。发送信号时必须当心,只有在

万不得已vim

时,才用kill信号(9),由于进程不能首先捕获它。要撤销全部的后台做业,能够输入kill 0。由于有些在后台运行的命令会启动多个进程,跟踪并找到全部要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止全部由当前shell启动的进程,是个有效的方法。

2.范例centos

实例1:列出全部信号名称命令:kill -l输出:[root @localhost test6]# kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+439) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+843) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+1247) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-1451) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-1055) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-659) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-263) SIGRTMAX-1 64) SIGRTMAX说明:只有第9种信号(SIGKILL)才能够无条件终止进程,其余信号进程都有权利忽略。 下面是经常使用的信号:HUP 1 终端断线INT 2 中断(同 Ctrl + C)QUIT 3 退出(同 Ctrl + \)TERM 15 终止KILL 9 强制终止CONT 18 继续(与STOP相反, fg/bg命令)STOP 19 暂停(同 Ctrl + Z)实例2:获得指定信号的数值[root @localhost test6]# kill -l KILL9[root @localhost test6]# kill -l SIGKILL9[root @localhost test6]# kill -l TERM15[root @localhost test6]# kill -l SIGTERM15[root@localhost test6]#实例3:先用ps查找进程,而后用kill杀掉命令:kill 3268[root@localhost test6]# ps -ef|grep vimroot 3268 2884 0 16:21 pts/1 00:00:00 vim install.logroot 3370 2822 0 16:21 pts/0 00:00:00 grep vim[root@localhost test6]# kill 3268实例4:完全杀死进程命令:kill –9 3268 // -9 强制杀掉进程
  • 1
ps:init是Linux系统操做中

不可缺乏bash

的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化全部的设备驱动程序和数据结构等)以后,就经过启动一个用户级程序init的方式,完成引导进程。因此,init始终是第一个进程(其进程编号始终为1)。 其它全部进程都是init进程的子孙。init进程是不可杀的!

PKILL数据结构

pkill 和killall 应用方法差很少,也是直接杀死运行中的程式;若是你想杀掉单个进程,请用kill 来杀掉。
应用方法:
#pkill 正在运行的程式名
 

centos killall安装

yum install psmisc
通常的杀死进程过程以下$ ps -ef | grep django-admin.py | grep -v grep501 20060 1 0 0:00.11 ttys001 0:00.38 python django-admin.py runserver 0.0.0.0:8002501 20063 20060 0 0:00.35 ttys001 0:01.07 python django-admin.py runserver 0.0.0.0:8002$ kill -TERM 20060 20063$ ps -ef | grep django-admin.py | grep -v grep
  • 1

常规篇:

用linux的终端命令

首先,用ps查看进程,方法以下:$ ps -ef……smx 1822 1 0 11:38 ? 00:00:49 gnome-terminalsmx 1823 1822 0 11:38 ? 00:00:00 gnome-pty-helpersmx 1824 1822 0 11:38 pts/0 00:00:02 bashsmx 1827 1 4 11:38 ? 00:26:28 /usr/lib/firefox-3.6.18/firefox-binsmx 1857 1822 0 11:38 pts/1 00:00:00 bashsmx 1880 1619 0 11:38 ? 00:00:00 update-notifier……smx 11946 1824 0 21:41 pts/0 00:00:00 ps -ef或者:$ ps -aux……smx 1822 0.1 0.8 58484 18152 ? Sl 11:38 0:49 gnome-terminalsmx 1823 0.0 0.0 1988 712 ? S 11:38 0:00 gnome-pty-helpersmx 1824 0.0 0.1 6820 3776 pts/0 Ss 11:38 0:02 bashsmx 1827 4.3 5.8 398196 119568 ? Sl 11:38 26:13 /usr/lib/firefox-3.6.18/firefox-binsmx 1857 0.0 0.1 6688 3644 pts/1 Ss 11:38 0:00 bashsmx 1880 0.0 0.6 41536 12620 ? S 11:38 0:00 update-notifier……smx 11953 0.0 0.0 2716 1064 pts/0 R+ 21:42 0:00 ps -aux此时若是我想杀了火狐的进程就在终端输入:
$ kill -s 9 1827
其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程。各个终止信号及其做用见附录。
1827则是上面ps查到的火狐的PID。
简单吧,但有个问题,进程少了则无所谓,进程多了,就会以为痛苦了,不管是ps -ef 仍是ps -aux,每次都要在一大串进程信息里面查找到要杀的进程,看的眼都花了。

进阶篇:

改进1:

把ps的查询结果经过管道给grep查找包含特定字符串的进程。管道符“|”用来隔开两个命令,管道符左边命令的输出会做为管道符右边命令的输入。$ ps -ef | grep firefoxsmx 1827 1 4 11:38 ? 00:27:33 /usr/lib/firefox-3.6.18/firefox-binsmx 12029 1824 0 21:54 pts/0 00:00:00 grep --color=auto firefox此次就清爽了。而后就是$kill -s 9 1827仍是嫌打字多?

改进2——使用pgrep:

一看到pgrep首先会想到什么?没错,grep!pgrep的p代表了这个命令是专门用于进程查询的grep。$ pgrep firefox1827看到了什么?没错火狐的PID,接下来又要打字了:$kill -s 9 1827

改进3——使用pidof:

看到pidof想到啥?没错pid of xx,字面翻译过来就是 xx的PID。$ pidof firefox-bin1827和pgrep相比稍显不足的是,pidof必须给出进程的全名。而后就是老生常谈:$kill -s 9 1827不管使用ps 而后慢慢查找进程PID 仍是用grep查找包含相应字符串的进程,亦或者用pgrep直接查找包含相应字符串的进程PID,而后手动输入给kill杀掉,都稍显麻烦。有没有更方便的方法?有!

改进4:

$ps -ef | grep firefox | grep -v grep | cut -c 9-15 | xargs kill -s 9
说明:
“grep firefox”的输出结果是,全部含有关键字“firefox”的进程。
“grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。
“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
“xargs kill -s 9”中的xargs命令是用来把前面命令的输出结果(PID)做为“kill -s 9”命令的参数,并执行该命令。“kill -s 9”会强行杀掉指定进程。
难道你不想抱怨点什么?没错太长了

改进5:

知道pgrep和pidof两个命令,干吗还要打那么长一串!$ pgrep firefox | xargs kill -s 9

改进6:

$ ps -ef | grep firefox | awk '{print $2}' | xargs kill -9kill: No such process有一个比较郁闷的地方,进程已经正确找到而且终止了,可是执行完却提示找不到进程。其中awk ‘{print $2}’ 的做用就是打印(print)出第二列的内容。根据常规篇,能够知道ps输出的第二列正好是PID。就把进程相应的PID经过xargs传递给kill做参数,杀掉对应的进程。

改进7:

难道每次都要调用xargs把PID传递给kill?答案是否认的:$kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`

改进8:

没错,命令依然有点长,换成pgrep。$kill -s 9 `pgrep firefox`

改进9——pkill:

看到pkill想到了什么?没错pgrep和kill!pkill=pgrep+kill。$pkill -9 firefox说明:”-9” 即发送的信号是9,pkill与kill在这点的差异是:pkill无须 “s”,终止信号等级直接跟在 “-“ 后面。以前我一直觉得是 “-s 9”,结果每次运行都没法终止进程。-f The pattern is normally only matched against the process name. When -f is set, the full command line is used.Which means, for example, if we see these lines in psaux:apache 24268 0.0 2.6 388152 27116 ? S Jun13 0:10 /usr/sbin/httpdapache 24272 0.0 2.6 387944 27104 ? S Jun13 0:09 /usr/sbin/httpdapache 24319 0.0 2.6 387884 27316 ? S Jun15 0:04 /usr/sbin/httpdWe can kill them all using the pkill -f option:
pkill -f httpd

改进10——killall:

killall和pkill是类似的,不过若是给出的进程名不完整,killall会报错。pkill或者pgrep只要给出进程名的一部分就能够终止进程。
$killall -9 firefox
相关文章
相关标签/搜索