プログラムをデーモンとして実行することと「&」を使用してバックグラウンドに分岐することの違いは何ですか?

プログラムをデーモンとして実行することと「&」を使用してバックグラウンドに分岐することの違いは何ですか?

システム管理者の観点から、UNIXベースのシステムにサービスを展開する際の実質的な違いは何ですか?

ベストアンサー1

デーモンの場合、欲しいものは何にも縛られないプロセスです。少なくとも端末に接続されておらず、自分のセッションにあり、何も開いていない親から継承されたファイル記述子がなく、現在のディレクトリを所有する親(initを除く)がユーザーの世話をしたくありません/。除去を防ぐ...

端末から切り離すには、新しいセッションを作成する必要があります。ただし、セッションを作成するためにグループ(またはセッション)リーダーにすることはできないため、新しいプロセスをフォークすることをお勧めします。親プロセスが終了すると仮定すると、これはそのプロセスに親プロセスがなくなり、initによって採用されることを意味します。次に、可能なすべてのファイル記述子を閉じますchdir("/")(閉じることはできません)。閉鎖現在の作業ディレクトリは、ファイル記述子と同様にリソースを解放し、/少なくとも現在の作業ディレクトリがディレクトリのアンロードを妨げないようにします。

このプロセスはセッションリーダーであるため、端末装置を開くと、その端末の制御プロセスになる危険があります。 2番目のフォークは、これが起こらないことを保証します。

一方、インタラクティブシェルは新しいプロセスグループを分岐して作成します(ターミナルのフォアグラウンドプロセスグループに属さないように)。非対話型シェルではプロセスを分岐し、その中の SIGINT を無視します。端末から切り離されず、ファイル記述子を閉じません(一部のシェルは標準入力を再び開きますが/dev/null)...

おすすめ記事