如何從 Linux 終端終止進程
重點
- 終止進程僅意味著強制其退出,當進程無回應或行為異常時,這可能是必要的。
- Linux 和 macOS 具有kill、pkill 和killall 等命令,可讓您透過進程的PID 或名稱終止進程。
- 終止進程時務必小心謹慎,並確保終止正確的進程以避免任何意外後果。
有時終止進程是擺脫它的唯一方法。儘管名字很刺耳,但「殺死」進程只是意味著「強制它退出」。以下是如何從 Linux 或 macOS 命令列執行此操作。
什麼是進程?
運行的程式(例如 Web 瀏覽器)、與桌面環境關聯的後台進程以及 Linux 系統服務都是進程。
您可以將流程分為兩組:
- 前台進程是由使用者啟動或啟動的進程。它們可能位於終端機視窗中,也可能是圖形應用程式。
- 後台進程是所有自動啟動且不與使用者進行任何互動的進程。他們不期望使用者輸入,也不向使用者呈現結果或輸出。後台程序是諸如服務和守護程序之類的東西。
如果說前台進程是前台的劇場工作人員和演員,那麼後台進程就是後台的「幕後」團隊。
當進程行為不當或故障時,它們可能會佔用過多的 CPU 時間、消耗 RAM,或進入緊密的運算循環並變得無回應。圖形應用程式可以拒絕響應滑鼠點擊。終端機應用程式可能永遠不會讓您返回命令提示字元。
殺死進程有什麼作用?
「殺死」進程只是意味著「強制進程退出」。如果進程拒絕回應,這可能是必要的。
Linux 提供了kill
、pkill
、 和killall
命令來允許您執行此操作。這些命令可以與任何類型的進程、圖形或命令列、前台或後台一起使用。
殺戮命令
要使用kill
,您必須知道要終止的進程的進程 ID (PID)。此ps
指令可用於尋找進程的 PID。
若要ps
搜尋所有進程,請使用-e
(所有進程)選項。建議透過管道傳輸輸出less
,因為輸出量會很大。鍵入ps
、一個空格、-e
、一個空格|
(管道字元)、另一個空格,然後鍵入less
。按 Enter 執行指令。
ps -e | less
這將為您提供一個類似於以下螢幕截圖的進程清單。less
您可以使用按鍵向前搜索/
,也可以使用?
按鍵向後搜尋。
若要專注於您感興趣的流程,請透過管道傳輸輸出ps
並grep
指定流程的名稱(或部分名稱)。
ps -e | grep shutter
找到要終止的進程的 PID 後,將其kill
作為參數傳遞給命令。若要終止上shutter
一個命令標識的進程,請使用下列命令:
kill 2099
該kill
命令是一個無聲的刺客——如果成功,它不會給你任何反饋。
它對於殺死 macOS 上的進程也同樣有效。
pkill 命令
該pkill
命令允許您按名稱殺死一個或多個進程。您不需要透過 PID 來識別進程。要使用,pkill
您需要提供一個搜尋字詞,pkill
用於檢查正在執行的進程清單。匹配進程終止。因此,您需要確保該搜尋字詞拼寫正確。
作為安全網,您可以pgrep
在使用該命令之前使用該pkill
命令。該pgrep
指令也接受搜尋字詞。它將列出與搜尋項目相符的每個進程的 PID。這是安全的,因為pgrep
不會向進程發出任何終止訊號,如果您輸入錯誤的搜尋字詞,您也不會錯誤地終止另一個進程。在將搜尋字詞傳遞給 之前,您可以確保您已經正確考慮了搜尋字詞pkill
。兩者pkill
都pgrep
以相同的方式處理搜尋字詞。它們的處理方式非常相似,以至於它們共用相同的手冊頁。
假設有一個名稱中帶有“subq”的進程。我們將使用該ps -u dave | grep
命令來查看幕後情況。您可以看到“subq”將匹配該進程並且單獨匹配該進程。這只是為了讓您可以看到進程的全名。
ps -u dave | grep subq
假設我們的用戶沒有這樣做;他們只知道進程名稱包含子字串「subq」。他們用來pgrep
檢查搜尋詞是否只有一個符合項目。然後他們將該搜尋字詞與 一起使用pkill
。
pgrep subq
pkill subq
您可以使用pkill
它一次終止多個進程。這裡用戶運行pgrep
來檢查 Chrome 啟動了多少個進程。他們用來pkill
殺死他們所有人。然後他們檢查pgrep
是否已全部刪除。
pgrep chrome
pkill chrome
pgrep chrome
如果多個同名進程正在運行,但您不想將它們全部殺死,則可以使用pgrep
(-f
命令列)選項來識別哪個進程是哪個。一個簡單的例子是兩個ping
進程。你想殺死其中一個,但不想殺死另一個。您可以使用它們的命令列來區分它們。請注意使用引號將命令列參數括起來。
pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"
殺戮命令
警告:在 Solaris 和 OpenIndiana 作業系統中,該killall
指令將終止屬於您的所有進程。如果是 root 或如果您已經發出,sudo killall
您將重新啟動電腦!在本文的研究過程中,最新版本的 OpenIndiana Hipster 2018.10 證實了此行為。
該killall
命令的操作方式與該命令類似pkill
,但有特定的差異。您必須提供準確的進程名稱,而不是將搜尋字詞傳遞給指令。
您不能提供與進程名稱的部分相符;您必須提供完整的進程名稱,如下所示:
killall shutt
killall shutter
(younger than)選項-y
可讓您終止運行時間少於指定時間的進程。週期以數字形式給出,後面跟著以下單位之一:
- 秒(秒)
- 米(分鐘)
- h(小時)
- d(天)
- w(週)
- M(月份,注意,大寫“M”)
- y(年)
ana
要終止剛啟動的名為 的進程並保留任何較舊的運行實例,如果您在兩分鐘內做出反應,ana
可以將以下參數與 一起使用:killall
killall -y 2m ana
(早於)選項-o
可讓您終止運行時間超過指定時間的進程。此命令將終止所有ssh
運行時間超過一天的連線:
killall -o 1d sshd
你能殺死任何進程嗎?
這些命令將允許您準確、安全地識別並終止錯誤的進程。然而,您可能太高興了,完全有可能終止一個不應該終止的進程。
始終保持謹慎。首先,確保您要終止的進程確實是您想要的進程。其次,仔細檢查 – 小心並確保目標進程是您想要結束的進程。一旦您滿意,即可繼續終止流程。
如果您意外終止了一個進程,那並不是世界末日。最可能的結果是出現問題,您必須重新啟動電腦,否則您可能會失去在與您終止的進程相關的程式中完成的工作。
Linux指令 |
|
文件 |
tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · p.opd · fsck · testdisk · seq · fd · pandoc · cd · $ ATHPATH _ _ _ _ _ _ _ _ uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · 查看 · 字串 · 輸入·重命名 · zip ·解壓· mount · umount ·安裝· fdisk · mmdir · rm · mmdir · rm rsync · df · gpg · vi · nano · mkdir · du · ln · patch ·轉換· rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr |
流程 |
別名 · 螢幕 · 頂部 · 不錯 · renice · 進度 · strace · systemd · tmux · chsh · 歷史記錄 · at · 批次 · 空閒 · 哪個 · dmesg · chfn · usermod · ps · chroot · xargs · tty ·小指· lsof ·小指· vmstat ·超時· wall · yes · kill ·睡眠· sudo · su ·時間· groupadd · usermod · groups · lshw · shutdown · reboot · h · poweroff · passwd · lscpu · crontab · date cron · poweroffg passwd · lscpu · cron _ pmap |
聯網 |
netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh -keygen · ho · whoami · w · iptables · ssh-keygen · ufw 花 |
發佈留言