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 は大丈夫だった。
| 固定リンク
コメント