GNU/Linux >> Linux の 問題 >  >> Linux

t よりも古いプロセスを強制終了するにはどうすればよいですか?

解決策 1:

GNU Killall は、プロセス名を使用して、特定の経過時間よりも古いプロセスを強制終了できます。

if [[ "$(uname)" = "Linux" ]];then killall --older-than 1h page.py;fi

解決策 2:

クリストファーの答えのおかげで、私はそれを次のように適応させることができました:

find /proc -maxdepth 1 -user apache -type d -mmin +60 -exec basename {} \; \
| xargs ps | grep page.py | awk '{ print $1 }' | sudo xargs kill

-mmin 見落としていた検索コマンドでした。

解決策 3:

find は常に機能するとは限りません。すべてのシステムで etimes が利用できるわけではありません。これは私の正規表現 newb ステータスによるものかもしれませんが、これ以上のものは必要ないと思います:

ps -eo pid,etimes,comm,user,tty | awk '{if ($4 ~ /builder/ && $5 ~ /pts/ && $2>600) print $1}'
  • すべてのプロセスを一覧表示し、列 PID、ELAPSED(etimes =秒)、COMMAND、USER、TT を提供します (thanks @ahoffman)
  • awk を使用して、4 列目 ($4、USER) にテキスト「builder」が含まれ、5 列目 ($5、TT) にテキスト 'pts' が含まれ、ELAPSED 列の値が 600 秒よりも大きい PID を出力します (thanks @アムト)

その後、それを kill にパイプするか、必要に応じてパイプすることができます。

解決策 4:

# get elapsed time in seconds, filter our only those who >= 3600 sec
ps axh -O etimes  | awk '{if ($2 >= 3600) print $2}'

必要に応じて ps をフィードできます 検索する PID のリストを含む、e.例:

ps h -O etimes 1 2 3

解決策 5:

これらの以前の回答の一部をニーズに合わせて変更できると思います。つまり:

for FILE in (find . -maxdepth 1 -user processuser -type d -mmin +60)
  do kill -9 $(basename $FILE) # I can never get basename to work with find's exec.  Let me know if you know how!
done

または

ps -eo pid,etime,comm | awk '$2!~/^..:..$/ && $3~/page\.py/ { print $1}' | kill -9

2番目があなたのニーズに最も合っていると思います。 find バージョンは、そのユーザーによって他のプロセスを無効にすることになります


--クリストファー・カレル


Linux
  1. ゾンビプロセスとは何ですか?ゾンビプロセスを見つけて殺す方法は?

  2. 特定の部分名を持つすべてのプロセスを強制終了する方法は?

  3. zshですべてのバックグラウンドプロセスを強制終了するには?

  1. Linuxで実行中のプロセスを強制終了する方法

  2. Linux で tmpreaper を使用して N 日以上経過したファイルを削除する方法

  3. UID を使用してすべてのユーザーのプロセスを強制終了するにはどうすればよいですか

  1. Linuxでプロセスを強制終了する方法は?終了するコマンド

  2. 単一のコマンドラインですべての PHP-FPM プロセスを強制終了する方法

  3. pgrep によって返されたすべてのプロセスを強制終了する方法