nohup制御端末なしでプログラムを予約してみますか?

nohup制御端末なしでプログラムを予約してみますか?

ザイルズ説明する

nohupとdisownはどちらもSIGHUPを抑制すると言うことができますが、その方法は異なります。 nohupはプログラムが最初にシグナルを無視するようにします(プログラムはそれを変更できます)。nohupはまた、制御端末なしでプログラムを予約しようとします。、端末が閉じたときにカーネルがSIGHUPを送信しないようにします。 disownは純粋にシェルの内側にあり、SIGHUPを送信せずにシェルを終了します。

$ nohup sleep 100 &
[1] 7882
nohup: ignoring input and appending output to 'nohup.out'
$ get-terminal-info-of-a-process.sh 7882
COMMAND                     CMD                         TT         PID  PPID CGNAME                      CGROUP                       PGID TPGID  SESS SESSION     OWNER
sleep 100                   sleep 100                   pts/5     7882  6780 systemd:/user.slice/user-10 7:pids:/user.slice/user-100  7882  7885  6780 c2          1000
$ tty
/dev/pts/5

edプロセスはnohupまだ呼び出すシェルと同じttyを持ちます/dev/pts/5。それで、Gillesは「nohupは、端末が閉じられたときにカーネルがSIGHUPを送信しないように端末を制御せずにプログラムを予約しようとします」という意味は何ですか?

彼の言葉が本当なら、どのようにnohupLinux APIまたはシステムコール機能を介して制御端末からプログラムを分離できますか?

ありがとうございます。

答え1

私は順番に、説明する、実行中のプロセスはnohupまだログインセッションと制御端末に関連付けられています。結局、そうでなかったら体操には意味がないでしょう。制御端子停止を無視

nohupターゲットプログラムをチェーンロードする前に、標準出力をリダイレクトし、ブレーク信号を無視する2つのタスクを実行する単純なチェーンローダです。

これはnohupFreeBSDのコードNetBSDからOpenBSDからTENEX Cケースで。ご覧のとおり、セッション操作や端末制御はありません。

関連情報