nohup はログアウトしてもプロセスを実行し続けさせるコマンドであり、coreutils の nohup.c によると signal(SIG_HUP, SIG_IGN) で端末が死んだ時にプロセスに配送されるシグナルを無視させるようにして、execve() で目的のプログラムを実行させる仕組みになっている。
気になっていたのは execve() で実行された新しいプロセスはシグナルハンドラを引き継ぐのかという点だが、それも execve() の manpage に書いてある。
POSIX.1-2001 は、動作が無視かデフォルトに設定されている全てのシグナルの処理方法は変更せずそのままにする、と規定している。
へぇ〜。(´ー`)
こんなネタこそ LPIC で出題したらいいんじゃないかと。