私は、バックグラウンドプロセスで断続的に死ぬ問題を抱えていた同僚を助けていました。
サーバーにログインして実行することでバックグラウンドプロセスを開始していることがわかりました。
su - <user> -c '<command>' &
「あは」と叫びました。「コマンドを「&」で開始すると、制御端末を終了するときにハングアップします。これを行うには、nohupなどを使用する必要があります。このプロセスは、デーモンとしての実行をサポートする必要があります。」
上記のコマンドをテストして私のポイントを実証しましたが...動作しているようです:上記のコマンドを実行したターミナルを終了したときに、コマンドによって開始されたプロセスが終了しませんでした。
コマンドは、出力がファイルに送られるカスタムPythonスクリプトです。私の知る限り、スクリプトにはインテリジェントな「デーモン化」のような機能はありません。Wikipedia:Daemon(computing):Creationページにリストされているデーモンとして実行するために必要なことは何もしません。
このようにコマンドを実行すると、期待どおりに動作します。
<command> &
exit
上記の場合、ターミナルを終了すると、コマンドによって開始されたバックグラウンドプロセスが終了します。
私の質問はこれです:
端末が終了したときにプロセスが終了しないようにする「su--c&」を追加するとどうなりますか。制御端子、標準入出力などについて詳しく知りたい
これは、このコマンドをバックグラウンドプロセスとして実行するという目標を達成するための合理的な方法ですか?そうでない場合、そうではありませんか?
私は社内でベストプラクティスを広めたいと思っていますが、私が行った推奨事項を実証およびバックアップできる必要があります。
何が起こっているのかも正確に理解したい。
chroot --userspec root:root / sh -c "exec some_forever_process" &
。ジョブは同じユーザーとして実行されており、nohup
前後に明示的ではありませんdisown
。では、この場合、終了時にシグナルを配信できないのはなぜですか?