題 殺死用戶的所有進程,除了linux中的一些進程


我在遠程服務器上的屏幕會話下運行了一些進程。當我試圖通過以下方式殺死所有這些進程時:

pkill -U tim

我的所有進程都被殺死了,包括那些我不想殺死的進程(即屏幕和ssh連接)。

除了屏幕和ssh連接之外,有沒有辦法殺死我的所有進程?


4
2017-09-30 17:23


起源




答案:


有點hackerish:

ps -U tim | egrep -v "ssh|screen" | cut -b11-15 | xargs -t kill

這將殺死除了任何ssh或屏幕進程之外的所有內容。以下是解釋的命令:

  • ps -U tim  - 顯然,將列出用戶tim的每個進程
  • egrep -v "ssh|screen"  - 將使用ssh或screen進程刪除行
  • cut -b11-15  - 將刪除第11-15列中的數據(通常是PID所在的位置)
  • xargs -t kill  - 將所有進程ID傳遞給kill命令

你也可以使用awk,如果你比較習慣的話。

ps -U tim | egrep -v "ssh|screen" | awk '{print $2}' | xargs -t kill

10
2017-09-30 18:39





沒有內置我所知道的東西。你可以創建一個這樣的腳本:

#!/bin/bash
ps ux | sed -e '/bash/d' -e '/screen/d' | awk '{print $2}' | while read process
do 
  kill $process
done

如果你想要避免殺戮的任何其他進程,你只需要添加更多

-e '/processname/d'

sed部分的條目。可能有一種更清潔的方式來處理它,但這將起作用。


1
2017-09-30 18:36





如果你要殺死所有的觸發器,你可能想要調查 為什麼 你需要這樣做......但是嘿,這完全是關於做事而不是做事  做事。

一個簡單的解決方案是使用兩個用戶ID ...一個用於屏幕和SSH連接,另一個用於您在某些時候想要殺死的所有進程。

這超出了“hackerish”而只是簡單的“hack”,但它有一個額外的優勢,因為當你殺死其他proc時,你作為“connect”用戶運行的任何OTHER程序都不會被殺死。這可能包括錯誤日誌的“尾巴”以及您可能想要留下的內容。

希望這可以幫助!


1
2017-09-30 18:48



你的意思是有兩個遠程服務器的用戶ID?只是好奇,我可以為自己創建另一個而無法切換到root嗎? - Tim


嘗試:

ps aux | grep ^$LOGNAME | egrep -v 'ps aux|-bash|sshd' | awk '{ print $2 }' | xargs kill -9; ps aux | grep $LOGNAME

1
2017-09-22 14:44





我使用@RoyRico的方法 - 由於缺乏聲譽而無法評論該帖子 - 並將其調整到我的系統。由於一些不同的配置,一個人沒有現成的工作。

ps -U myUserName | egrep -v "ssh|screen|grep|bash|systemd|(sd-pam)|ps" | awk '{print $1}' | tail -n +2 | xargs -t kill

好吧,我排除了更多我不想被殺的進程。其次,PID出現在第一列,因此前“cut”命令完全錯誤定位(作為一種完全正常且可接受的黑客解決方案;))。第三,雖然grep'ing我有一個“PID”作為我使用tail排除的頭條。


0
2017-09-09 13:29