透過刪除頂部顯示的進程來清理一些內存

透過刪除頂部顯示的進程來清理一些內存

我的系統中有一個老用戶(bob)。根據“top”的輸出,似乎該用戶運行了許多進程(其中大多數進程的命令是“java”)。由於我具有 root 訪問權限,因此我刪除了該用戶,但進程仍然以用戶「1000」的身份繼續運行。如何停止這些進程永久運作?

答案1

如果您刪除了用戶,並且還刪除了用戶可能擁有的任何 cronjobs 等,那麼重新啟動系統應該會殺死它們的進程,而不會在系統再次啟動時重新啟動它們。

如果無法重新啟動,您可以使用下列命令向屬於 UID 1000 使用者的所有進程發送終止訊號

sudu pkill -u 1000

您可以透過先執行來查看哪些進程會受到該指令的影響

pgrep -u 1000

也可以看看man pkill

答案2

首先,我將伺服器所有進程的目前狀態儲存到一個檔案中。

ps -wwfax -o uid=,pid=,ppid=,cmd=   > /root/list_of_process_as_today.txt

之後我將專注於我的不良用戶。

ps -wwfax -o uid=,pid=,ppid=,cmd=  | sed '/^ *1000  *\([0-9][0-9]*\) .*$/p;d'

輸出的範例可以是:

 1000  3096  3087      \_ sshd: em444@pts/0
 1000  3099  3096          \_ -bash
 1000  3543  3099              \_ ps -wwfax -o uid=,pid=,ppid=,cmd=
 1000  3544  3099              \_ sed /^ *1000  *\([0-9][0-9]*\) .*$/p;d
 1000 21628     1 SCREEN
 1000 21629 21628  \_ /bin/bash

行程清單分析

我目前的 shell 是進程 3099 。你可以看到一些子進程,我運行的命令3543,和一位家長3096

你可以看到我有進程21628,他的父進程是進程1, 過程1是所有進程的父進程。

之後我可以使用此命令來終止所有進程。

kill  $(/root/list_of_process_as_today.txt  | sed 's/^ *1000  *\([0-9][0-9]*\) .*$/\1/p;d')

相關內容