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