如何從 Linux 終端終止進程

如何從 Linux 終端終止進程

重點

  • 終止進程僅意味著強制其退出,當進程無回應或行為異常時,這可能是必要的。
  • Linux 和 macOS 具有kill、pkill 和killall 等命令,可讓您透過進程的PID 或名稱終止進程。
  • 終止進程時務必小心謹慎,並確保終止正確的進程以避免任何意外後果。

有時終止進程是擺脫它的唯一方法。儘管名字很刺耳,但「殺死」進程只是意味著「強制它退出」。以下是如何從 Linux 或 macOS 命令列執行此操作。

什麼是進程?

運行的程式(例如 Web 瀏覽器)、與桌面環境關聯的後台進程以及 Linux 系統服務都是進程。

您可以將流程分為兩組:

  • 前台進程是由使用者啟動或啟動的進程。它們可能位於終端機視窗中,也可能是圖形應用程式。
  • 後台進程是所有自動啟動且不與使用者進行任何互動的進程。他們不期望使用者輸入,也不向使用者呈現結果或輸出。後台程序是諸如服務和守護程序之類的東西。

如果說前台進程是前台的劇場工作人員和演員,那麼後台進程就是後台的「幕後」團隊。

當進程行為不當或故障時,它們可能會佔用過多的 CPU 時間、消耗 RAM,或進入緊密的運算循環並變得無回應。圖形應用程式可以拒絕響應滑鼠點擊。終端機應用程式可能永遠不會讓您返回命令提示字元。

殺死進程有什麼作用?

「殺死」進程只是意味著「強制進程退出」。如果進程拒絕回應,這可能是必要的。

Linux 提供了killpkill、 和killall命令來允許您執行此操作。這些命令可以與任何類型的進程、圖形或命令列、前台或後台一起使用。

殺戮命令

要使用kill,您必須知道要終止的進程的進程 ID (PID)。此ps指令可用於尋找進程的 PID。

若要ps搜尋所有進程,請使用-e(所有進程)選項。建議透過管道傳輸輸出less,因為輸出量會很大。鍵入ps、一個空格、-e、一個空格|(管道字元)、另一個空格,然後鍵入less。按 Enter 執行指令。

ps -e | less

終端機視窗中的 ps 命令

這將為您提供一個類似於以下螢幕截圖的進程清單。less您可以使用按鍵向前搜索/,也可以使用?按鍵向後搜尋。

ps 在 less 視窗中的輸出

若要專注於您感興趣的流程,請透過管道傳輸輸出psgrep指定流程的名稱(或部分名稱)。

ps -e | grep shutter

ps 指令透過 grep 管道查找快門進程

找到要終止的進程的 PID 後,將其kill作為參數傳遞給命令。若要終止上shutter一個命令標識的進程,請使用下列命令:

kill 2099

終端機視窗中的kill命令

kill命令是一個無聲的刺客——如果成功,它不會給你任何反饋。

它對於殺死 macOS 上的進程也同樣有效。

pkill 命令

pkill命令允許您按名稱殺死一個或多個進程。您不需要透過 PID 來識別進程。要使用,pkill您需要提供一個搜尋字詞,pkill用於檢查正在執行的進程清單。匹配進程終止。因此,您需要確保該搜尋字詞拼寫正確。

作為安全網,您可以pgrep在使用該命令之前使用該pkill命令。該pgrep指令也接受搜尋字詞。它將列出與搜尋項目相符的每個進程的 PID。這是安全的,因為pgrep不會向進程發出任何終止訊號,如果您輸入錯誤的搜尋字詞,您也不會錯誤地終止另一個進程。在將搜尋字詞傳遞給 之前,您可以確保您已經正確考慮了搜尋字詞pkill。兩者pkillpgrep以相同的方式處理搜尋字詞。它們的處理方式非常相似,以至於它們共用相同的手冊頁

假設有一個名稱中帶有“subq”的進程。我們將使用該ps -u dave | grep命令來查看幕後情況。您可以看到“subq”將匹配該進程並且單獨匹配該進程。這只是為了讓您可以看到進程的全名。

ps -u dave | grep subq

終端機視窗中的 ps 命令

假設我們的用戶沒有這樣做;他們只知道進程名稱包含子字串「subq」。他們用來pgrep檢查搜尋詞是否只有一個符合項目。然後他們將該搜尋字詞與 一起使用pkill

pgrep subq pkill subq

終端機視窗中的 pgrep 和 pkill

您可以使用pkill它一次終止多個進程。這裡用戶運行pgrep來檢查 Chrome 啟動了多少個進程。他們用來pkill殺死他們所有人。然後他們檢查pgrep是否已全部刪除。

pgrep chrome pkill chrome pgrep chrome

終端機視窗中的 pgrep 和 pkill

如果多個同名進程正在運行,但您不想將它們全部殺死,則可以使用pgrep-f命令列)選項來識別哪個進程是哪個。一個簡單的例子是兩個ping進程。你想殺死其中一個,但不想殺死另一個。您可以使用它們的命令列來區分它們。請注意使用引號將命令列參數括起來。

pgrep -f "ping 192.168.4.22" pkill -f "ping 192.168.4.22"

pgrep pkill 使用 ping 命令列

殺戮命令

警告:在 Solaris 和 OpenIndiana 作業系統中,該killall指令將終止屬於您的所有進程。如果是 root 或如果您已經發出,sudo killall您將重新啟動電腦!在本文的研究過程中,最新版本的 OpenIndiana Hipster 2018.10 證實了此行為。

killall命令的操作方式與該命令類似pkill,但有特定的差異。您必須提供準確的進程名稱,而不是將搜尋字詞傳遞給指令。

您不能提供與進程名稱的部分相符;您必須提供完整的進程名稱,如下所示:

killall shutt killall shutter

終端機視窗中的killall命令

(younger than)選項-y可讓您終止運行時間少於指定時間的進程。週期以數字形式給出,後面跟著以下單位之一:

  • 秒(秒)
  • 米(分鐘)
  • h(小時)
  • d(天)
  • w(週)
  • M(月份,注意,大寫“M”)
  • y(年)

ana要終止剛啟動的名為 的進程並保留任何較舊的運行實例,如果您在兩分鐘內做出反應,ana可以將以下參數與 一起使用:killall

killall -y 2m ana

比選項更年輕的killall

(早於)選項-o可讓您終止運行時間超過指定時間的進程。此命令將終止所有ssh運行時間超過一天的連線:

killall -o 1d sshd

終端機視窗中的killall命令

你能殺死任何進程嗎?

這些命令將允許您準確、安全地識別並終止錯誤的進程。然而,您可能太高興了,完全有可能終止一個不應該終止的進程。

始終保持謹慎。首先,確保您要終止的進程確實是您想要的進程。其次,仔細檢查 – 小心並確保目標進程是您想要結束的進程。一旦您滿意,即可繼續終止流程。

如果您意外終止了一個進程,那並不是世界末日。最可能的結果是出現問題,您必須重新啟動電腦,否則您可能會失去在與您終止的進程相關的程式中完成的工作。

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *