01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
nohup unko
としてプログラムを起動した場合、端末を閉じたり exit コマンドを発行した場合にもそのまま動いていて欲しいものですが、 zsh 上ではこれも終了されてしまう。
しかし、シェルスクリプトを書いてその中で nohup していた場合は端末や zsh を殺しても大丈夫。
ちょっと調べたら答えがあった。
端末を殺した場合のフロー
端末が殺される→中で実行しているシェルに SIGHUP が送られる→シェルがよろくやる
んでこれが bash の場合は
SIGHUP を送らない
のだけど zsh の場合は
子プロセス全部に問答無用で SIGHUP を送る
ので、 nohup していても殺されてしまう。
シェルスクリプトの中で nohup していて死なないのは、
端末の死→ zsh にSIGHUP が来る → zsh は子プロセスのシェルスクリプトを実行している sh に SIGHUP を送る→ sh は nohup してる子プロセスに SIGHUP を再送したりしない
という理由から。
対策
setopt nocheckjobs
こうすると SIGHUP を送ったりしなくなる
あるいは
unko &!
とすると、 unko は job table から外された形で起動するので SIGHUP の嵐に巻き込まれず幸福実現する。
job table から落すのは行儀が悪い気がするので nocheckjobs するのがいいのではないかと思う。
via. http://d.hatena.ne.jp/lurker/20070220/1171932797
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2010-07-29 23:21