Command-Line
殺死我在過去一小時內啟動的所有程序?
如何使用我的使用者名殺死在(過去一小時,過去一天)等內啟動的所有程序?
- 查找不到一小時的程序
- 提取pid
- 殺死 pids
工藝清單:
$ ps -e -o pid,user,etimes,comm \ | awk -v me=$USER '$2 == me && $3 <= 3600 { print }'
生產
661162 jaroslav 3006 chrome 667859 jaroslav 1711 chrome 669145 jaroslav 1471 chrome 671222 jaroslav 1016 chrome 675278 jaroslav 270 chrome 675578 jaroslav 207 sleep 676094 jaroslav 91 chrome 676102 jaroslav 91 chrome 676528 jaroslav 11 chrome 676529 jaroslav 11 chrome 676553 jaroslav 11 chrome 676602 jaroslav 3 top 676615 jaroslav 0 ps 676616 jaroslav 0 awk
提取pid:
$ ps -e -o pid,user,etimes,comm \ | awk -v me=$USER '$2 == me && $3 <= 3600 { print $1 }'
殺死pid:
$ ps -e -o pid,user,etimes,comm \ | awk -v me=$USER '$2 == me && $3 <= 3600 { print $1 }' \ | xargs -rt kill
xargs 的 -tr 參數是可選的,如果沒有輸出,將跳過 xargs 並報告每個執行的行。
您甚至可以對其進行測試,
kill -0
它不會停止程序,但如果程序不再執行,則會報告錯誤。$ ps -e -o pid,user,etimes,comm \ | awk -v me=$USER '$2 == me && $3 <= 3600 { print $1 }' \ | xargs -rt kill -0 kill -0 661162 667859 669145 671222 675278 676602 677310 677311 677883 677893 677965 677966 677967 677968 kill: (677966): No such process kill: (677967): No such process
意識到這個管道/腳本可以在回饋後殺死自己,(注意上面程序列表中的 etimes=0),這是一個忽略最近程序的修訂版本:
ps -u "$LOGNAME" -o pid,etimes,comm \ | awk '$2 <= 3600 && $2 > 1 { print $1 }' \ | xargs -rt kill -0
這可能不是很便攜,但應該可以在 Linux 上執行(至少 ubuntu 18)。希望這能讓您對如何解決這個問題有所了解。
<mother-mode>
不要在沒有 awk 和 xargs 的情況下執行 ps 命令,並首先殺死以查看將被殺死的內容,如果以 root 身份執行,請小心。您可能會關閉系統或殺死最近重新啟動的一些重要服務。</mother-mode>