ユーザーがsu
次に切り替えるとします。root
$ su
Password:
bash-4.2# crontab -l
root
特定の時間にこれらのユーザーをすべてログアウトするにはどうすればよいですか?
私が試したこと
わかりました。次のコマンドを使用してください。
bash-4.2# ps -A -u root | grep bash
2303 tty1 00:00:00 bash
2548 pts/0 00:00:00 bash
3040 pts/0 00:00:00 bash
3080 pts/2 00:00:00 bash
が所有するすべてのBashシェルを入手できますroot
。しかし、によって生成されたものをどのように選択できますかsu
? su-edシェルを実行すると、echo $$
次の結果が表示されます。
bash-4.2# echo $$
3040
次に、次のことを試してください。
bash-4.2# kill 3040
root
しかし、それは皮を殺しません。また、1つを作成すると、cron job echo $$
必要なPIDは提供されません。だからこれはうまくいきません。
今私は詰まっています。
ベストアンサー1
pkill -u 0 su
all rootとして実行されているすべてのプロセスsu
(これによりサブシェルが終了します)
以下で実行されているbashプロセスのみを終了したい場合su
:
for pid in $(pgrep -u 0 bash); do
parent_pid=$(ps -o ppid= -p "$pid")
parent_command=$(ps -o comm= -p "$parent")
if [ "$parent_command" = "su" ]; then kill -HUP "$parent_pid"; fi
done
そう言えば、これはおそらく悪い考えでしょう。あなたが殺す樹皮が重要なことをしている場合はどうなりますか?
長時間放置されたシェルを殺すには、次のように設定します。TMOUT
。.bashrc
たとえば、を使用すると、TMOUT=600
bashは10分間入力がないと自動的に終了します。
あなたが達成したいものが何であるかを慎重に考えてください。シェルを終了しても解決しようとする問題は解決しない可能性があります。