你是怎麼在 Linux 幹掉程序的?

語言: CN / TW / HK

我想幹掉Liunx某個程序怎麼搞?

如果程序在前臺執行,你可以使用 Ctrl+C 終端快捷方式。但是,如果程序不可見(在後臺執行),你可以使用專用命令殺死它。

終止程序是指在執行過程中停止程序。如果你知道程序ID(PID),則可以使用 kill 命令,如下所示:

> kill <signal> <PID>

在上面的語法中,signal指的是要傳送終止的終止訊號,並且PID指的是程序的 ID。

還有一個 killall 命令,我將在本文中討論kill 和 killall 命令。

Linux 中的終止訊號

當一個程序被作業系統或使用者終止時,即程序沒有自行完成,它會被髮送一個終端訊號。

以下是可用的終止訊號:

訊號

數值

描述

SIGHUP

1

訊號結束通話:當控制它的終端關閉時傳送到程序。

SIGINT

2

訊號中斷:當用戶終止程序時傳送給程序的訊號.(例如 Ctrl + X)

SIGKILL

9

Signal Kill:立即退出程序的訊號,不允許它儲存當前狀態。

SIGTERM

15

訊號終止:傳送到訊號以請求終止程序。該訊號可以被程序忽略。但這是終止程序的首選方式,因為它可以在程序收到 SIGTERM 時釋放資源。

SIGSTOP

19 (for x86, ARM and most others)

17 (for Alpha)

23 (for MIPS)

24 (for PARISC)

停止訊號:停止程序的訊號,但稍後將恢復。

常用的訊號 9 和 15

獲取程序的PID

你還需要了解要終止的程序的詳細資訊。使用 kill 命令,你必須提供程序的 ID(PID)。你可以從程序名稱中獲取 PID

> pidof exact_process_name

比如獲取java程序的程序號

> pidof java
8075 1032

在 Linux 命令列中終止程序

使用 kill 命令

該kill命令要求你知道要終止的程序的 ID,以及可選的終止訊號。

要簡單地終止命令,請使用以下語法:

kill [signal] <PID>

向 PID 傳送終止訊號是可選的,如果未提供任何訊號,則kill預設傳送 SIGTERM ( 15),以正常終止所述程序結束。

我啟動了sleep 命令的後臺程序(它給了我一個 PID)。我們使用kill命令殺死它。

殺死這個特定的例項sleep如下所示:

$  sleep 120 &
[1] 125686
$ kill 125686
[1]  + terminated  sleep 120

如果我想使用終止訊號,我可以使用數值或訊號本身:

$ sleep 120 &
[1] 125746
$ kill -SIGKILL 125746
[1]  + killed     sleep 120
$ sleep 120 &
[1] 125759
$ kill -9 125759
[1]  + killed     sleep 120

如果 kill 命令沒有指定訊號,則預設使用 SIGTERM (15)。

使用 killall 命令

如果不知道某個程序的PID是多少,或者該程序有多個子程序,又想一次性殺死子程序和父程序,可以使用killall命令。

killall [signal] <process-name>

與kill命令類似,指定終止訊號是可選的。當沒有指定終止訊號時,killall將傳送 SIGTERM ( 15) 以優雅地關閉所述程序。

為了演示killall的使用,我將殺死兩個正在執行的 sleep 命令。

$ sleep 120 &
[1] 112351
$ sleep 2000 &
[2] 112362
$ killall sleep
[1]-  Terminated              sleep 120
[2]+  Terminated              sleep 2000

此外,你可以使用該-e標誌來查詢程序名稱的完全匹配。

使用 pkill 命令

命令的替代命令kill是pkill命令。它是pgrep和kill命令的組合。

killall殺死所有具有匹配名稱的程序。另一方面,pkill使用模式匹配來匹配程序並殺死它們。

pkill [options] pattern

命令中可用的一些有用選項pkill如下:

  •  -u: 特定所有者擁有的程序
  •  -x: 完全匹配模式的程序
  •  -signal: 指定終止訊號(預設為 SIGTERM)

結束nginx程序

> pkill nginx