なぜデーモンが必要なのですか? [閉鎖]

なぜデーモンが必要なのですか? [閉鎖]

私はデーモンを生成する方法を読んで理解しましたが、読んだことすべてからまったく理解できませんでした。なぜこれを行う必要があります。

端末制御を取得するプロセスを避けるためにfork-setsid-forkを実行するという内容を読んでいますが、どういう意味ですか? &を使用してバックグラウンドでプログラム(例: './script&')を起動した場合、それがデーモンに変わるプログラムを通常どおり実行するのとは異なり、このプロセスが実行されるのはなぜですか?

これは、ログアウトするとバックグラウンドプロセスが停止し、デーモンが実行され続けるという意味ですか? 「ターミナル制御権の確保」を理解するのは本当に難しいです。

これが私を悩ませる理由は、ロボットに組み込みRPiを開発しているため、起動時にプログラムを起動させる必要があるからです。現在は、次のコマンドを使用してrc.localから起動しますsu user -c 'python /home/user/launcher.py &' &。起動時にプログラムの起動に問題が発生したことはありませんが(SSHを介してRPiに接続するときに使用されるプロセスも表示されますps -e)、リスクがあるのか​​悪い習慣なのか疑問に思います。

答え1

これはただ一つの質問ではありません。すべての質問には長い答えがあります。単に

  • &を使用してバックグラウンドでプログラム(例: './script&')を起動した場合、それがデーモンに変わるプログラムを通常どおり実行するのとは異なり、このプロセスが実行されるのはなぜですか?

    プログラムをバックグラウンドで実行すると、端末から直接制御することはできませんが(単純に制御することはできません^C)、端末に書き込んで操作を中断することがあります。通常、デーモンはターミナルからそれ自体で分離され(ポーキングを除く)、出力/エラーがファイルにリダイレクトされます。

  • これは、ログアウトするとバックグラウンドプロセスが停止し、デーモンが実行され続けるという意味ですか?

    バックグラウンドプロセスは保護できますが、nohup出力がリダイレクトされない限り、端末を閉じると書き込みが防止され、停止する可能性があるエラーが発生します。

  • 危険があるのか​​/これが悪い習慣なのか気になります。

    プログラムの出力(およびエラーメッセージ)を追跡する問題に加えて、プログラムが停止した場合に再起動する問題もあります。サービススクリプトは、システムの他のサービスが設計されている方法に適しており、デーモンを制御するためのかなり標準的な方法を提供します。

関連情報