システム管理者の観点から、UNIXベースのシステムにサービスを展開する際の実質的な違いは何ですか?
ベストアンサー1
デーモンの場合、欲しいものは何にも縛られないプロセスです。少なくとも端末に接続されておらず、自分のセッションにあり、何も開いていない親から継承されたファイル記述子がなく、現在のディレクトリを所有する親(initを除く)がユーザーの世話をしたくありません/
。除去を防ぐ...
端末から切り離すには、新しいセッションを作成する必要があります。ただし、セッションを作成するためにグループ(またはセッション)リーダーにすることはできないため、新しいプロセスをフォークすることをお勧めします。親プロセスが終了すると仮定すると、これはそのプロセスに親プロセスがなくなり、initによって採用されることを意味します。次に、可能なすべてのファイル記述子を閉じますchdir("/")
(閉じることはできません)。閉鎖現在の作業ディレクトリは、ファイル記述子と同様にリソースを解放し、/
少なくとも現在の作業ディレクトリがディレクトリのアンロードを妨げないようにします。
このプロセスはセッションリーダーであるため、端末装置を開くと、その端末の制御プロセスになる危険があります。 2番目のフォークは、これが起こらないことを保証します。
一方、インタラクティブシェルは新しいプロセスグループを分岐して作成します(ターミナルのフォアグラウンドプロセスグループに属さないように)。非対話型シェルではプロセスを分岐し、その中の SIGINT を無視します。端末から切り離されず、ファイル記述子を閉じません(一部のシェルは標準入力を再び開きますが/dev/null
)...