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