私(root以外の一般ユーザー)が継続的に実行されるバックグラウンドプロセスを制御する方法はありますか?
私がしなければならないことは、プロセスを開始、停止、再起動することだけです。 PIDを介して監視し、SIGHUPまたはSIGINTを送信して終了します。複雑なbashスクリプトを使用でき、システム全体のスクリプトである必要はありません。ちょうど私のために。
SSHからログアウトするときに停止しないようにすることも本当に必要です。
RHEL 6.4でこれを行う方法はありますか?
答え1
スクリーンまたはtmux
もちろん、screenやtmuxなどのターミナルマルチプレクサを使用してプロセスを開始してから実行することもできます。プロセスはscreenまたはtmuxセッションに残り、必要に応じて(screenまたはtmux)に接続/切断できます。
背景
目的のプロセスを実行してバックグラウンドに置き、コマンドを使用して現在の端末から切断することができますdisown
。
$ disown -a
また、プロセスをバックグラウンドに置かずにプロセスを開始したい場合でも、disown
このコマンドを使用できますnohup
。
$ nohup myexec &
シェルがシャットダウンした後もmyexec
実行されます。
はい
偽のプロセスを開始します。
$ sleep 12345 &
[1] 24339
$
私たちが見ることができることを確認してください:
$ pgrep -f "sleep 12345"
24339
しかし、それでも端末に接続されています。
$ jobs
[1]+ Running sleep 12345 &
disown
それでは始めましょう。
$ disown -a
$ jobs
$
まだ実行中であることを確認してください。
$ pgrep -f "sleep 12345"
24339
それでは、ログアウトしてもう一度ログインしてみましょう。まだそこにいることを確認してください。
$ pgrep -f "sleep 12345"
24339
標準的な方法では、いつでもこのプロセスを終了できます。
$ pkill -HUP -f "sleep 12345"
$ pgrep -f "sleep 12345"
$
HUP
上記のコードは、「スリープ12345」パターンと一致するプロセス名でシグナルを送信します。詳しく見てみると今はなくなりました。