解決策 1:
ps 、 awk 、 kill を組み合わせてこれを行うことができます:
ps -eo pid,etime,comm
プロセス PID、プロセス開始からの経過時間、およびコマンド名を引数なしで 3 列に出力します。経過時間は次のいずれかのようになります:
mm:ss
hh:mm:ss
d-hh:mm:ss
1 週間以上実行されているプロセスが必要なので、その 3 番目のパターンに一致する行を探します。次のように、awk を使用して、実行時間とコマンド名でプロセスをフィルター処理できます。
ps -eo pid,etime,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }'
これは、7 日以上実行されている「mycommand」に一致するすべてのコマンドの pid を出力します。そのリストを kill にパイプすれば完了です:
ps -eo pid,etime,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }' | kill -9
解決策 2:
killall --quiet --older-than 1w process_name