« yash 改造中 | トップページ | テレビ修理!! »

2007年12月25日 (火)

bash を suspend するとはまることがある

例えば端末で (bash; echo ok) と打って、bash をサブシェルの子プロセスとして起動する。そしてそのまま suspend を実行すると、嵌まる

なぜ嵌まるのかというと、サブシェルのプロセスグループ ID (PGID) と起動した bash の PGID が異なったまま SIGSTOP シグナルを送ってしまうから。Bash はサスペンドするが、サブシェルは動いたままなので、制御は大元のシェルまで返ってこない。

全てのシェルで嵌まるというわけではない。例えば (tcsh; echo ok) と打って同じように suspend してみよう。Tcsh はサスペンド時に PGID を元に戻すので、サブシェルも共にサスペンドする。よって、嵌まらない 。

Bash もソースコードにはPGID を戻した方がいいかも?というようなことが書いてあって、一応問題を認識してはいるようだ。

ここら辺のことは POSIX の setpgid の項目に書いてあったりする。

ksh でも同様の問題を確認。zsh は大丈夫だった。

|

« yash 改造中 | トップページ | テレビ修理!! »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: bash を suspend するとはまることがある:

« yash 改造中 | トップページ | テレビ修理!! »