ps
30日より古いプロセスのみを表示するためにコマンド出力から日付リストを取得するにはどうすればよいですか?
私の目標は、これらのプロセスを終了することです。コマンドで簡単にこれを行うことができますkillall
。
例えばkillall -u user --older-than 1M
しかし、動作しない古いバージョンのコマンドがあったので、--older-than
別の方法を見つける必要がありました。
私が検討していることの1つは、プロセスのリストをkillコマンドに渡すことですが、30日以上経過したプロセスのみを取得する方法がわかりません。
そのようなものがある場合:
ps --no-header -u username --sort=start_time -o user,pid,lstart | #get all processes beyond 30 days old | while read -r pid; do kill $pid; done
編集:procpsバージョン3.2.8を使用しています。
答え1
etimes
比較的最新バージョンのprocpsでは、秒を経過時間として使用できます。
ps -Ao etimes= -o pid= |
awk -v n=30 '$1 >= n*86400 {print $2}' |
xargs -r kill
(これはGNUをオプションxargs
と仮定します-r
)
または:
ps -Ao etimes= -o pid= |
awk -v n=30 '$1 >= n*86400 {print "kill", $2}' |
sh
以前のバージョンでは、次のように戻すことができますetime
。
LC_ALL=C ps -Ao etime= -o pid= |
awk -v n=30 '$1 ~ /^[[:digit:]]+-/ && 0+$1 >= n {print "kill", $2}' |
sh
(この構文はPOSIXであり、すべてのPOSIX互換システムで動作する必要があります。)