web-dev-qa-db-ja.com

Nohupはどのように機能しますか?

私の理解では、SIGHUPのようなプロセス信号をブロックするには、信号の送信先のプロセス内からブロックする必要があります。それでも、bashのようなUnixシェルは、HUPコマンドを使用して、子プロセスを生成し、親内から子のNohupシグナルをブロックできます。これはどのように作動しますか? Nohupはシグナルをブロックし、フォークせずに子プロセスを実行しますか?それが私が考えることができる唯一の方法です。

8
user628544

NohupegGNUの coreutilsの実装のソースコードを見ることができますバージョン 。たくさんのセットアップがあり、その一部は国際化を目的としており、残りはさまざまなリダイレクトオプションを処理するためのものです。次に、実際の「nohupping」が発生します。

  signal (SIGHUP, SIG_IGN);

  char **cmd = argv + optind;
  execvp (*cmd, cmd);

ご想像のとおり、これはHUP信号を無視するようにプロセスを設定し、次に要求されたコマンドをexecsします。

7
Stephen Kitt