Topに表示されるプロセスを削除してメモリを解放します

Topに表示されるプロセスを削除してメモリを解放します

私のシステムには古いユーザー (bob) がいます。 「top」の出力によると、このユーザーによって多くのプロセスが実行されているようです (ほとんどのコマンドは「java」です)。 私はルート アクセス権を持っているので、ユーザーを削除しましたが、プロセスはユーザー「1000」で引き続き実行されています。 これらのプロセスが永続的に実行されないようにするにはどうすればよいですか?

答え1

ユーザーを削除し、それによってユーザーが実行していた cronjobs なども削除された場合は、システムを再起動すると、システムの再起動時にプロセスを再起動せずに強制終了できます。

再起動が不可能な場合は、UID 1000のユーザーに属するすべてのプロセスに終了信号を送信することができます。

sudu pkill -u 1000

まずこのコマンドを実行すると、どのプロセスが影響を受けるかがわかります。

pgrep -u 1000

も参照してくださいman pkill

答え2

まず、サーバーのすべてのプロセスの現在の状態をファイルに保存します。

ps -wwfax -o uid=,pid=,ppid=,cmd=   > /root/list_of_process_as_today.txt

その後、私は悪いユーザーに焦点を当てます。

ps -wwfax -o uid=,pid=,ppid=,cmd=  | sed '/^ *1000  *\([0-9][0-9]*\) .*$/p;d'

出力の例は次のようになります。

 1000  3096  3087      \_ sshd: em444@pts/0
 1000  3099  3096          \_ -bash
 1000  3543  3099              \_ ps -wwfax -o uid=,pid=,ppid=,cmd=
 1000  3544  3099              \_ sed /^ *1000  *\([0-9][0-9]*\) .*$/p;d
 1000 21628     1 SCREEN
 1000 21629 21628  \_ /bin/bash

プロセスリストの分析

私の現在のシェルはプロセス3099です。子プロセスがいくつか表示されています。私が実行したコマンド3543、および1人の親3096

プロセス21628があり、その親はプロセスであることがわかります1、 プロセス1すべてのプロセスの親です。

このコマンドを使用すると、すべてのプロセスを強制終了できます。

kill  $(/root/list_of_process_as_today.txt  | sed 's/^ *1000  *\([0-9][0-9]*\) .*$/\1/p;d')

関連情報