如何在 Linux 中尋找並終止遠端進程?

如何在 Linux 中尋找並終止遠端進程?

我正在開發一個正在運行的守護進程,現在無法創建任何新進程(即我無法啟動新進程來殺死其他惡意進程)。因此,我需要能夠從遠端電腦終止進程。在沒有管理員權限的情況下如何遠端「殺死」?如果我無法以普通使用者身分從遠端電腦終止我自己的進程,請告訴我,以便我可以將其標記為正確答案。

答案1

為了終止機器上執行的進程,某些本機進程(或核心)必須發出終止訊號。因此,您需要一種方法來使進程發出該訊號,並且由於您無法建立新進程,因此您需要找到一種完全依賴已執行進程的方法。

沒有標準的守護程序可以幫助您。它們都會處理您的身份驗證,然後派生一個以您的身份運行的新進程(例如 shell)。因此,如果您沒有控制台存取權限並且沒有與機器的現有交互,那麼您就不走運了。


從你的評論來看,聽起來你的機器上仍然有一個外殼。然後你可以做一些事情。您無法執行任何外部進程,例如lsps。但您可以執行內建指令,例如echoread、 和killkill不是所有 shell 中的內建指令,但它是所有支援作業控制的 shell 中的一個,例如 bash 和 zsh)。

/proc每個進程在:下都有一個關聯的目錄,/proc/12345其中 12345 是進程 ID。因此,您可以透過探索獲得一些有關存在的資訊/procecho使用通配符在這裡很有幫助,例如cd /proc; echo [0-9]*顯示所有正在運行的進程的進程 ID。如果 shell 是 zsh,你可以使用 glob 限定詞做很多事情;例如,echo /proc/*(u$UID)僅顯示在您的使用者 ID 下執行的進程。

一種無需分叉即可顯示文件內容的方法是

while read -r line; do
  echo "$line"
done </path/to/file

您可以透過將多個進程全部傳遞給 來一次終止多個進程kill。如果您已識別出屬於您的守護程序的進程,請嘗試使用群組領導者的進程 IDkill -9 -PGID來終止其進程組。PGID您可以使用 找到進程 123 的進程組 ID </proc/123/stat read pid tcomm state ppid pgrp sid more; echo $pgrp。 (相同的資訊以更易讀的形式存在,/proc/123/但您不適合閱讀它。)您也可以嘗試使用以下命令向所有進程(包括原始 shell)發送訊號:

trap : NUM
kill -NUM -1

選擇 (9) 以外的 NUM 值,KILL以便該trap指令確實會導致您的 shell 忽略該訊號(KILL無法擷取)。

答案2

以下資訊是在http://www.cyberciti.biz/faq/kill-process-in-linux-or-terminate-a-process-in-unix-or-linux-systems/

Linux/UNIX下使用kill指令殺死進程

Kill 指令可以在 Linux 和 UNIX/BSD 等作業系統下運作。

步驟#1:首先,您需要找出進程PID(進程ID)

使用 ps 指令或 pidof 指令找出進程 ID (PID)。語法: ps aux | grep 進程名 pidof 進程名

例如,如果進程名稱為lighttpd,則可以使用下列任一命令來取得進程ID:

ps aux | grep lighttpdOutput

lighttpd  3486  0.0  0.1   4248  1432 ?        S    Jul31   0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
lighttpd  3492  0.0  0.5  13752  3936 ?        Ss   Jul31   0:00 /usr/bin/php5-cg

或使用 pidof 命令,該命令用於查找正在運行的程式的進程 ID:

pidof lighttpd

輸出

3486

步驟#2:使用 PID(進程 ID)終止進程

上面的指令告訴你lighttpd進程的PID(3486)。現在使用這個 PID 終止進程:

# kill 3486

或者

# kill -9 3486

其中,-9是特殊的Kill訊號,它將殺死進程。

Killall 命令範例

請勿在 UNIX 系統上使用 Killall 指令(僅限 Linux 指令)。您也可以使用killall命令。 Killall 指令會依名稱殺死程序(無需尋找 PID):

# killall -9 lighttpd

殺死火狐進程:

# killall -9 firefox-bin

正如我之前所說,UNIX 系統上的killall 還做了其他事情。它會殺死所有進程,而不僅僅是特定進程。不要在 UNIX 系統上使用killall(使用kill -9)。

答案3

正如您在評論中所說,管理員是目前唯一可以幫助您的人。我建議你獲得Perl 食譜並閱讀16.19節了解處理殭屍的正確方法。

相關內容