linux ubuntu kill指令和killall指令的区别(killall会终止所有与该名字匹配的进程)
參考文章1:kill 和killall----殺死進(jìn)程
參考文章2:如何使用killall和kill命令來(lái)停止進(jìn)程
參考文章3:在 Linux 上使用 kill 和 killall 命令來(lái)管理進(jìn)程 | Linux 中國(guó)
文章目錄
- 用法
- 如何使用killall
- 如何使用kill
- 系統(tǒng)信號(hào)
- 查找正在運(yùn)行的進(jìn)程
- killall詳細(xì)解釋
killall是一個(gè)基于名稱終止系統(tǒng)上運(yùn)行進(jìn)程的工具。kill則是終止基于進(jìn)程ID號(hào)(PID)的進(jìn)程。kill和killall還可以向進(jìn)程發(fā)送特定的系統(tǒng)信號(hào)。
使用killall和kill以及ps負(fù)責(zé)管理和結(jié)束被卡住或無(wú)響應(yīng)的流程。在本教程中,在每個(gè)示例中將[process name]替換您要終止的進(jìn)程的名稱。
用法
如何使用killall
killall命令采用以下形式:
killall [process name]killall將終止與指定名稱匹配的所有程序。killall發(fā)送SIGTERM信號(hào),它終止與指定名稱匹配的正在運(yùn)行的進(jìn)程。您可以使用以下-s選項(xiàng)指定不同的信號(hào):
killall -s 9 [process name]這發(fā)送SIGKILL信號(hào),您還可以使用以下格式之一指定信號(hào):
killall -KILL [process name] killall -SIGKILL [process name] killall -9 [process name]如何使用kill
kill命令終止其PID指定的各個(gè)進(jìn)程。
命令采用以下形式:
kill [PID]如果沒(méi)其他選項(xiàng),則kill發(fā)送SIGTERM到指定的PID并要求應(yīng)用程序或服務(wù)自行關(guān)閉。
在一個(gè)kill命令中可以指定多個(gè)pid和備用系統(tǒng)信號(hào)。下面的示例都將SIGKILL信號(hào)發(fā)送到指定的PID:
kill -s KILL [PID] kill -KILL [PID]系統(tǒng)信號(hào)
kill命令不會(huì)直接終止進(jìn)程。相反,一個(gè)信號(hào)被發(fā)送到進(jìn)程,如果進(jìn)程接收到一個(gè)給定的信號(hào),進(jìn)程將有相應(yīng)的指令。手冊(cè)頁(yè)提供了所有可用信號(hào)的進(jìn)一步參考::
man 7 signal Standard signals Linux supports the standard signals listed below. Several signal numbers are architecture-dependent, as indicated in the "Value" column. Where three values are given, the first one is usually valid for alpha and sparc, the middle one for x86, arm, and most other architectures, and the last one for mips. (Values for parisc are not shown; see the Linux kernel source for signal numbering on that architecture.) A dash (-) denotes that a signal is absent on the corresponding architecture. ? First the signals described in the original POSIX.1-1990 standard. ? Signal Value Action Comment ────────────────────────────────────────────────────────────────────── SIGHUP 1 Term Hangup detected on controlling terminal or death of controlling process SIGINT 2 Term Interrupt from keyboard SIGQUIT 3 Core Quit from keyboard SIGILL 4 Core Illegal Instruction SIGABRT 6 Core Abort signal from abort(3) SIGFPE 8 Core Floating-point exception SIGKILL 9 Term Kill signal SIGSEGV 11 Core Invalid memory reference SIGPIPE 13 Term Broken pipe: write to pipe with no readers; see pipe(7) SIGALRM 14 Term Timer signal from alarm(2) SIGTERM 15 Term Termination signal SIGUSR1 30,10,16 Term User-defined signal 1 SIGUSR2 31,12,17 Term User-defined signal 2 SIGCHLD 20,17,18 Ign Child stopped or terminated SIGCONT 19,18,25 Cont Continue if stopped SIGSTOP 17,19,23 Stop Stop process SIGTSTP 18,20,24 Stop Stop typed at terminal SIGTTIN 21,21,26 Stop Terminal input for background process SIGTTOU 22,22,27 Stop Terminal output for background process ? The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.簡(jiǎn)單地列出所有可用的信號(hào),而不包含它們的描述:
kill -l killall -l [root@RV1126_RV1109:~]# kill -l1) HUP2) INT3) QUIT4) ILL5) TRAP6) ABRT7) BUS8) FPE9) KILL 10) USR1 11) SEGV 12) USR2 13) PIPE 14) ALRM 15) TERM 16) STKFLT 17) CHLD 18) CONT 19) STOP 20) TSTP 21) TTIN 22) TTOU 23) URG 24) XCPU 25) XFSZ 26) VTALRM 27) PROF 28) WINCH 29) POLL 30) PWR 31) SYS 32) RTMIN 64) RTMAX如果需要將信號(hào)名稱轉(zhuǎn)換為信號(hào)編號(hào),或?qū)⑿盘?hào)編號(hào)轉(zhuǎn)換為信號(hào)名稱,請(qǐng)使用以下示例:
$ kill -l 9 KILL ? $ kill -l kill 9查找正在運(yùn)行的進(jìn)程
使用像htop或top這樣的實(shí)用程序來(lái)查看進(jìn)程的實(shí)時(shí)列表及其對(duì)系統(tǒng)資源的消耗。(我的arm-linux沒(méi)有htop命令!!!)
使用ps命令查看當(dāng)前正在運(yùn)行的進(jìn)程及其pid。下面的示例使用grep過(guò)濾當(dāng)前為字符串mediaserver運(yùn)行的所有進(jìn)程列表:(加不加字符串符號(hào)好像都可以。。。)
[root@RV1126_RV1109:~]# ps -aux | grep mediaserver root 690 0.0 0.3 6084 3040 pts/0 S 13:53 0:02 ipc-daemon --no-mediaserver root 741 8.6 10.0 655072 87580 pts/0 Sl 13:53 4:59 mediaserver -c /oem/usr/share/mediaserver/rv1109/ipc.conf root 996 0.0 0.0 2056 224 pts/2 S+ 14:51 0:00 grep mediaserver [root@RV1126_RV1109:~]#左邊第二列中列出的數(shù)字是PID,在mediaserver過(guò)程中是690。grep進(jìn)程總是與自己匹配以進(jìn)行簡(jiǎn)單的搜索,就像第二個(gè)結(jié)果一樣。
注意
您可以使用命令ps auxf查看所有正在運(yùn)行的進(jìn)程的分層樹。
獲得PID或進(jìn)程名稱后,使用killall或kill終止上述過(guò)程。
找到PID的另一個(gè)選擇是pgrep。
[root@RV1126_RV1109:~]# pgrep mediaserver 741驗(yàn)證流程終止
將-w選項(xiàng)添加到killall命令,將使killall等待進(jìn)程終止后退出。考慮下面的命令:
這個(gè)示例將SIGTERM系統(tǒng)信號(hào)發(fā)送給一個(gè)后臺(tái)進(jìn)程,該進(jìn)程的名稱與irssi匹配。killall將等待匹配的進(jìn)程結(jié)束。如果沒(méi)有進(jìn)程匹配指定的名稱,killall將返回一條錯(cuò)誤消息:
$ killall -w irssi irssi: no process found但是我的怎么是這樣的???
[root@RV1126_RV1109:~]# killall -w mediaserver killall: bad signal name 'w' [root@RV1126_RV1109:~]# [root@RV1126_RV1109:~]# killall -w irssi killall: bad signal name 'w'killall詳細(xì)解釋
介紹 killall 命令
一次終止多個(gè)進(jìn)程有個(gè)更簡(jiǎn)單方法,使用 killall 命令。你或許可以根據(jù)名稱猜測(cè)出,killall 會(huì)終止所有與該名字匹配的進(jìn)程。這意味著我們可以使用此命令來(lái)停止所有流氓 Chromium 進(jìn)程。這很簡(jiǎn)單:
$ killall /usr/lib64/chromium-browser/chromium-browser
但是要小心使用 killall。該命令能夠終止與你所給出名稱相匹配的所有進(jìn)程。這就是為什么我喜歡先使用 ps -ef 命令來(lái)檢查我正在運(yùn)行的進(jìn)程,然后針對(duì)要停止的命令的準(zhǔn)確路徑運(yùn)行 killall。
你也可以使用 -i 或 --interactive 參數(shù),來(lái)讓 killkill 在停止每個(gè)進(jìn)程之前提示你。(額我的arm linux沒(méi)有-i參數(shù)。。。)
killall 還支持使用 -o 或 --older-than 參數(shù)來(lái)查找比特定時(shí)間更早的進(jìn)程。例如,如果你發(fā)現(xiàn)了一組已經(jīng)運(yùn)行了好幾天的惡意進(jìn)程,這將會(huì)很有幫助。又或是,你可以查找比特定時(shí)間更晚的進(jìn)程,例如你最近啟動(dòng)的失控進(jìn)程。使用 -y 或 --young-than 參數(shù)來(lái)查找這些進(jìn)程。
總結(jié)
以上是生活随笔為你收集整理的linux ubuntu kill指令和killall指令的区别(killall会终止所有与该名字匹配的进程)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: windows10如何解除文件路径最大长
- 下一篇: 如何理解Linux shell中的“2>