私の理解では、SIGHUP
のようなプロセス信号をブロックするには、信号の送信先のプロセス内からブロックする必要があります。それでも、bash
のようなUnixシェルは、HUP
コマンドを使用して、子プロセスを生成し、親内から子のNohup
シグナルをブロックできます。これはどのように作動しますか? Nohup
はシグナルをブロックし、フォークせずに子プロセスを実行しますか?それが私が考えることができる唯一の方法です。
Nohup
、egGNUの coreutils
の実装のソースコードを見ることができますバージョン 。たくさんのセットアップがあり、その一部は国際化を目的としており、残りはさまざまなリダイレクトオプションを処理するためのものです。次に、実際の「nohupping」が発生します。
signal (SIGHUP, SIG_IGN);
char **cmd = argv + optind;
execvp (*cmd, cmd);
ご想像のとおり、これはHUP信号を無視するようにプロセスを設定し、次に要求されたコマンドをexec
sします。