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 nginxKILL 命令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」參數會列出所有的信號名稱一、kill命令能夠帶信號號碼選項,也能夠不帶。若是沒有信號號碼,kill命令就會發出終止信號(15),這個信號能夠被進程捕獲,使得進程在退出以前能夠清理並釋放資源。也能夠用kill向進程發送特定的信號。例如:kill -2 123
-a 當處理當前進程時,不限制命令名和進程號的對應關係
-p 指定kill 命令只打印相關進程的進程號,而不發送任何信號
-s 指定發送信號
-u 指定用戶
萬不得已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 強制殺掉進程不可缺乏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
常規篇:
用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簡單吧,但有個問題,進程少了則無所謂,進程多了,就會以爲痛苦了,不管是ps -ef 仍是ps -aux,每次都要在一大串進程信息裏面查找到要殺的進程,看的眼都花了。
其中-s 9 制定了傳遞給進程的信號是9,即強制、儘快終止進程。各個終止信號及其做用見附錄。
1827則是上面ps查到的火狐的PID。
進階篇:
改進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