Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save rch850/4663430 to your computer and use it in GitHub Desktop.
Save rch850/4663430 to your computer and use it in GitHub Desktop.
nohup コマンドは、プロセスをデーモンとして動かすときの貧者の方法だ。
Bruno Ranschaert が書いているように、インタラクティブシェルでコマンドを起動す
ると、それは制御ターミナルを持ち、制御プロセス(一般にログインシェル)が終了
した時に SIGHUP (ハングアップ)シグナルを受け取る。nohup コマンドは、入力を
/dev/null として、出力とエラーを nohup.out に向けて、プログラムが割り込み、終
了、ハングアップのシグナルを無視するようにする。制御ターミナルは同じものを持ち
続けるが、ターミナルからの制御を無視するようになる。バックグラウンドでプロセス
を動かしたい場合には、末尾の & などでシェルにそれを伝える必要がある。
一般に nohup で動くプロセスは長時間動作するが、インタラクティブな入力を待機す
ることはない。
一般に(気合で何とかしない限り)、デーモンプロセスはバックグラウンドで動作し、
ターミナルから切断され、何らかの入力を受け付ける。ネットワークデーモンはコネク
ションの要求を受け付けたり、UDP のメッセージをネットワーク越しに受け付け、適当
な処理をしてレスポンスを返す。Webサーバや DBMS を想像するといい。
プロセスが完全にデーモン化すると、いくつかの nohup と同じ動作をする。I/O を再
配置してターミナルと切り離し、プロセスグループから自身を切り離し、いくつかのシ
グナルを無視する(全てのシグナルを無視するわけではない)。一般には、一旦フォー
クして、元のプロセスは終了する。子プロセスは再びフォークし、プロセスグループと
セッションIDなどを書き換え、再度終了する。孫プロセスは自立して、ps に表示され
なくなる。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment