這篇文章給大家介紹如何在Linux中強(qiáng)制殺死進(jìn)程,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、成都做網(wǎng)站、皋蘭網(wǎng)絡(luò)推廣、小程序設(shè)計、皋蘭網(wǎng)絡(luò)營銷、皋蘭企業(yè)策劃、皋蘭品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供皋蘭建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:www.rwnh.cn
常規(guī)篇:
首先,用ps查看進(jìn)程,方法如下:
$ ps -ef
…… smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal smx 1823 1822 0 11:38 ? 00:00:00 gnome-pty-helper smx 1824 1822 0 11:38 pts/0 00:00:02 bash smx 1827 1 4 11:38 ? 00:26:28 /usr/lib/firefox-3.6.18/firefox-bin smx 1857 1822 0 11:38 pts/1 00:00:00 bash smx 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-terminal smx 1823 0.0 0.0 1988 712 ? S 11:38 0:00 gnome-pty-helper smx 1824 0.0 0.1 6820 3776 pts/0 Ss 11:38 0:02 bash smx 1827 4.3 5.8 398196 119568 ? Sl 11:38 26:13 /usr/lib/firefox-3.6.18/firefox-bin smx 1857 0.0 0.1 6688 3644 pts/1 Ss 11:38 0:00 bash smx 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
此時如果我想殺了火狐的進(jìn)程就在終端輸入:
$ kill -s 9 1827
其中-s 9 制定了傳遞給進(jìn)程的信號是9,即強(qiáng)制、盡快終止進(jìn)程。各個終止信號及其作用見附錄。
1827則是上面ps查到的火狐的PID。
簡單吧,但有個問題,進(jìn)程少了則無所謂,進(jìn)程多了,就會覺得痛苦了,無論是ps -ef 還是ps -aux,每次都要在一大串進(jìn)程信息里面查找到要殺的進(jìn)程,看的眼都花了。
進(jìn)階篇:
改進(jìn)1:
把ps的查詢結(jié)果通過管道給grep查找包含特定字符串的進(jìn)程。管道符“|”用來隔開兩個命令,管道符左邊命令的輸出會作為管道符右邊命令的輸入。
$ ps -ef | grep firefox
smx 1827 1 4 11:38 ? 00:27:33 /usr/lib/firefox-3.6.18/firefox-bin smx 12029 1824 0 21:54 pts/0 00:00:00 grep --color=auto firefox
這次就清爽了。然后就是
$kill -s 9 1827
改進(jìn)2——使用pgrep:
一看到pgrep首先會想到什么?沒錯,grep!pgrep的p表明了這個命令是專門用于進(jìn)程查詢的grep。
$ pgrep firefox
1827
看到了什么?沒錯火狐的PID,接下來又要打字了:
$kill -s 9 1827
改進(jìn)3——使用pidof:
看到pidof想到啥?沒錯pid of xx,字面翻譯過來就是 xx的PID。
$ pidof firefox-bin
1827
和pgrep相比稍顯不足的是,pidof必須給出進(jìn)程的全名。然后就是老生常談:
$kill -s 9 1827
無論使用ps 然后慢慢查找進(jìn)程PID 還是用grep查找包含相應(yīng)字符串的進(jìn)程,亦或者用pgrep直接查找包含相應(yīng)字符串的進(jìn)程PID,然后手動輸入給kill殺掉
改進(jìn)4:
$ps -ef | grep firefox | grep -v grep | cut -c 9-15 | xargs kill -s 9
說明:
“grep firefox”的輸出結(jié)果是,所有含有關(guān)鍵字“firefox”的進(jìn)程。
“grep -v grep”是在列出的進(jìn)程中去除含有關(guān)鍵字“grep”的進(jìn)程。
“cut -c 9-15”是截取輸入行的第9個字符到第15個字符,而這正好是進(jìn)程號PID。
“xargs kill -s 9”中的xargs命令是用來把前面命令的輸出結(jié)果(PID)作為“kill -s 9”命令的參數(shù),并執(zhí)行該命令。“kill -s 9”會強(qiáng)行殺掉指定進(jìn)程。
改進(jìn)5:
知道pgrep和pidof兩個命令,干嘛還要打那么長一串!
$ pgrep firefox | xargs kill -s 9
改進(jìn)6:
$ ps -ef | grep firefox | awk '{print $2}' | xargs kill -9
kill: No such process
有一個比較郁悶的地方,進(jìn)程已經(jīng)正確找到并且終止了,但是執(zhí)行完卻提示找不到進(jìn)程。
其中awk '{print $2}' 的作用就是打?。╬rint)出第二列的內(nèi)容。根據(jù)常規(guī)篇,可以知道ps輸出的第二列正好是PID。就把進(jìn)程相應(yīng)的PID通過xargs傳遞給kill作參數(shù),殺掉對應(yīng)的進(jìn)程。
改進(jìn)7:
難道每次都要調(diào)用xargs把PID傳遞給kill?答案是否定的:
$kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`
改進(jìn)8:
沒錯,命令依然有點長,換成pgrep。
$kill -s 9 `pgrep firefox`
改進(jìn)9——pkill:
看到pkill想到了什么?沒錯pgrep和kill!pkill=pgrep+kill。
$pkill -9 firefox
說明:"-9" 即發(fā)送的信號是9,pkill與kill在這點的差別是:pkill無須 “s”,終止信號等級直接跟在 “-“ 后面。之前我一直以為是 "-s 9",結(jié)果每次運(yùn)行都無法終止進(jìn)程。
改進(jìn)10——killall:
killall和pkill是相似的,不過如果給出的進(jìn)程名不完整,killall會報錯。pkill或者pgrep只要給出進(jìn)程名的一部分就可以終止進(jìn)程。
$killall -9 firefox
附錄:各種信號及其用途
Signal | Description | Signal number on Linux x86[1] |
---|---|---|
SIGABRT | Process aborted | 6 |
SIGALRM | Signal raised by alarm | 14 |
SIGBUS | Bus error: "access to undefined portion of memory object" | 7 |
SIGCHLD | Child process terminated, stopped (or continued*) | 17 |
SIGCONT | Continue if stopped | 18 |
SIGFPE | Floating point exception: "erroneous arithmetic operation" | 8 |
SIGHUP | Hangup | 1 |
SIGILL | Illegal instruction | 4 |
SIGINT | Interrupt | 2 |
SIGKILL | Kill (terminate immediately) | 9 |
SIGPIPE | Write to pipe with no one reading | 13 |
SIGQUIT | Quit and dump core | 3 |
SIGSEGV | Segmentation violation | 11 |
SIGSTOP | Stop executing temporarily | 19 |
SIGTERM | Termination (request to terminate) | 15 |
SIGTSTP | Terminal stop signal | 20 |
SIGTTIN | Background process attempting to read from tty ("in") | 21 |
SIGTTOU | Background process attempting to write to tty ("out") | 22 |
SIGUSR1 | User-defined 1 | 10 |
SIGUSR2 | User-defined 2 | 12 |
SIGPOLL | Pollable event | 29 |
SIGPROF | Profiling timer expired | 27 |
SIGSYS | Bad syscall | 31 |
SIGTRAP | Trace/breakpoint trap | 5 |
SIGURG | Urgent data available on socket | 23 |
SIGVTALRM | Signal raised by timer counting virtual time: "virtual timer expired" | 26 |
SIGXCPU | CPU time limit exceeded | 24 |
SIGXFSZ | File size limit exceeded | 25 |
Linux是一種免費(fèi)使用和自由傳播的類UNIX操作系統(tǒng),是一個基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。
關(guān)于如何在Linux中強(qiáng)制殺死進(jìn)程就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
當(dāng)前標(biāo)題:如何在Linux中強(qiáng)制殺死進(jìn)程
本文地址:http://www.rwnh.cn/article28/pgsejp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站改版、關(guān)鍵詞優(yōu)化、小程序開發(fā)、建站公司、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)