终止进程的方法总结(使用)
ctrl+c
沒錯,這應該是你最常用到的方法了,當前終端非后臺運行一個程序后,使用ctrl+c
即可終止當前程序。
ctrl+z
這種方式不算完全終止,更像是暫停,因為它可以通過fg或者bg繼續執行。
舉個例子,代碼如下:
編譯運行到一定程序后,按下ctrl+z:
$?gcc?-o?test?test.c $?./test 0 1 2 ^Z [1]+??Stopped?????????????????./hello root@ubuntu16:c$?fg ./hello 3 4 5 root@ubuntu16:c$?在ctrl+z之后,再輸入fg或者bg,你會發現它接著上次的地方繼續運行。
kill
這是最常見也是最常用的了,雖然它名為kill,但實際上它可以給進程發送各種類型的信號,其中信號9就是比較常用的,即用來終止進程。
$?kill?-9?pidkill用于給進程發信號,上面的命令表示給進程id為pid的程序發送9信號。
常見信號如下:
-
HUP ? ? 1 ? ?終端斷線
-
INT ? ? ? 2 ? ?中斷(同 Ctrl + C)
-
QUIT ? ?3 ? ?退出(同 Ctrl + \)
-
TERM ? ?15 ? ?終止
-
KILL ? ? ?9 ? ?強制終止
-
CONT ? 18 ? ?繼續(與STOP相反, fg/bg命令)
可以看到信號KILL就是強制終止程序。
你也可以通過這樣來查看這些數字的意義:
$?kill?-l?9 KILL $?kill?-l1)?SIGHUP?????2)?SIGINT???3)?SIGQUIT??4)?SIGILL???5)?SIGTRAP6)?SIGABRT?????7)?SIGBUS???8)?SIGFPE???9)?SIGKILL?10)?SIGUSR1 11)?SIGSEGV????12)?SIGUSR2?13)?SIGPIPE?14)?SIGALRM?15)?SIGTERMkillall
killall進程殺死進程,它在某些情況下會失效,具體可以參考《killall為什么找不到你的進程》
它還支持殺死一定時間的進程,例如殺死運行超過30分鐘的hello進程:
其中-o表示older-than,當然你還可以用-y,表示yonger-than。
m表示分鐘,還有其他的時間刻度:
-
s ? ?秒
-
m ? ?分鐘
-
h ? ?小時
-
d ? ?天
-
w ? ?周
-
M ? ?月
-
y ? ?年
它除了可以根據名字還可以根據正則表達式來殺死進程。使用-r參數即可。
pkill
pkill也可以根據進程名殺死進程,它和killall有點類似。
$?pkill?hello由于你可能起了多個hello程序,所以為了殺死最舊的進程,你可以這樣做:
$?pkill?-o?hello?#oldest或者殺死最新的進程:
$?pkill?-n?hello?#newest或者計算運行的hello程序的數量:
$?pkill?-c?hello如何查找進程id
上面提到的有些命令需要根據pid進行操作,如何獲取pid呢?也有幾種常見的方法。
ps
這是最常見的的了,可以參考《ps命令實例詳解》
pidof
pidof可以直接獲取某個進程的進程id,也比較準確:
$?pidof?hello 7584結合kill可以這樣用:
$?kill?-9?`pidof?hello`是不是一氣呵成?
pgrep
它同樣可以通過名字直接獲取到進程id:
$?pgrep?hello 19971 24770top
top 的結果中也可以看到各個進程的進程id。
總結
本文僅對一些常見終止進程方式進行簡單介紹,更多用法可以參考對應手冊。
但是這些操作都有著同樣的本質,那就是給進程發送信號,而進程通常對這個信號的處理是終止程序或者被迫終止。所以如果你想要實現優雅退出,可以試著給進程發特定信號,在收到該信號后,進程做善后處理,然后退出。
摘自:守望先生
總結
以上是生活随笔為你收集整理的终止进程的方法总结(使用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark _25.plus _使用id
- 下一篇: 详析K8S架构