
私のシステムには古いユーザー (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')