linux ubuntu kill指令和killall指令的区别(killall会终止所有与该名字匹配的进程)
參考文章1:kill 和killall----殺死進程
參考文章2:如何使用killall和kill命令來停止進程
參考文章3:在 Linux 上使用 kill 和 killall 命令來管理進程 | Linux 中國
文章目錄
- 用法
- 如何使用killall
- 如何使用kill
- 系統信號
- 查找正在運行的進程
- killall詳細解釋
killall是一個基于名稱終止系統上運行進程的工具。kill則是終止基于進程ID號(PID)的進程。kill和killall還可以向進程發送特定的系統信號。
使用killall和kill以及ps負責管理和結束被卡住或無響應的流程。在本教程中,在每個示例中將[process name]替換您要終止的進程的名稱。
用法
如何使用killall
killall命令采用以下形式:
killall [process name]killall將終止與指定名稱匹配的所有程序。killall發送SIGTERM信號,它終止與指定名稱匹配的正在運行的進程。您可以使用以下-s選項指定不同的信號:
killall -s 9 [process name]這發送SIGKILL信號,您還可以使用以下格式之一指定信號:
killall -KILL [process name] killall -SIGKILL [process name] killall -9 [process name]如何使用kill
kill命令終止其PID指定的各個進程。
命令采用以下形式:
kill [PID]如果沒其他選項,則kill發送SIGTERM到指定的PID并要求應用程序或服務自行關閉。
在一個kill命令中可以指定多個pid和備用系統信號。下面的示例都將SIGKILL信號發送到指定的PID:
kill -s KILL [PID] kill -KILL [PID]系統信號
kill命令不會直接終止進程。相反,一個信號被發送到進程,如果進程接收到一個給定的信號,進程將有相應的指令。手冊頁提供了所有可用信號的進一步參考::
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.簡單地列出所有可用的信號,而不包含它們的描述:
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如果需要將信號名稱轉換為信號編號,或將信號編號轉換為信號名稱,請使用以下示例:
$ kill -l 9 KILL ? $ kill -l kill 9查找正在運行的進程
使用像htop或top這樣的實用程序來查看進程的實時列表及其對系統資源的消耗。(我的arm-linux沒有htop命令!!!)
使用ps命令查看當前正在運行的進程及其pid。下面的示例使用grep過濾當前為字符串mediaserver運行的所有進程列表:(加不加字符串符號好像都可以。。。)
[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:~]#左邊第二列中列出的數字是PID,在mediaserver過程中是690。grep進程總是與自己匹配以進行簡單的搜索,就像第二個結果一樣。
注意
您可以使用命令ps auxf查看所有正在運行的進程的分層樹。
獲得PID或進程名稱后,使用killall或kill終止上述過程。
找到PID的另一個選擇是pgrep。
[root@RV1126_RV1109:~]# pgrep mediaserver 741驗證流程終止
將-w選項添加到killall命令,將使killall等待進程終止后退出。考慮下面的命令:
這個示例將SIGTERM系統信號發送給一個后臺進程,該進程的名稱與irssi匹配。killall將等待匹配的進程結束。如果沒有進程匹配指定的名稱,killall將返回一條錯誤消息:
$ 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詳細解釋
介紹 killall 命令
一次終止多個進程有個更簡單方法,使用 killall 命令。你或許可以根據名稱猜測出,killall 會終止所有與該名字匹配的進程。這意味著我們可以使用此命令來停止所有流氓 Chromium 進程。這很簡單:
$ killall /usr/lib64/chromium-browser/chromium-browser
但是要小心使用 killall。該命令能夠終止與你所給出名稱相匹配的所有進程。這就是為什么我喜歡先使用 ps -ef 命令來檢查我正在運行的進程,然后針對要停止的命令的準確路徑運行 killall。
你也可以使用 -i 或 --interactive 參數,來讓 killkill 在停止每個進程之前提示你。(額我的arm linux沒有-i參數。。。)
killall 還支持使用 -o 或 --older-than 參數來查找比特定時間更早的進程。例如,如果你發現了一組已經運行了好幾天的惡意進程,這將會很有幫助。又或是,你可以查找比特定時間更晚的進程,例如你最近啟動的失控進程。使用 -y 或 --young-than 參數來查找這些進程。
總結
以上是生活随笔為你收集整理的linux ubuntu kill指令和killall指令的区别(killall会终止所有与该名字匹配的进程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows10如何解除文件路径最大长
- 下一篇: 如何理解Linux shell中的“2>