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


8

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

回答:


7

あなたはの実装のソースコードを見てとることができnohup例えば GNUのcoreutilsバージョン。大量の設定があり、一部は国際化の目的で、残りはさまざまなリダイレクトオプションを処理します。次に、実際の「nohupping」が発生します。

  signal (SIGHUP, SIG_IGN);

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

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


-2

使用する行為はnohup、生成されたプロセスのPPIDを1(init)に変更するだけなので、シェルが終了すると、そのシェルの子プロセスではなくなり、HUPを受け取りません。

編集:私が時々投稿する前にもっと考える必要があります。私の恥を思い出させるためにここに残します:-(

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.