« コマンドラインシェルのマニアックな比較 | トップページ | コマンドラインシェルのマニアックな比較 その 3 »

2007年12月31日 (月)

コマンドラインシェルのマニアックな比較 その 2

echo `cat` とやってから特殊文字 susp で SIGTSTP シグナルを送って cat を止めようとするとどうなるか試してみた。

bash
何も起こらない。cat は停止しない。
tcsh
何も起こらない。cat は停止しない。
zsh
何も起こらない。cat は停止しない。
ksh
無限 fork 発生。危うくシステムを強制終了させなければならなくなるところだった。

停止しないとは書いたものの、停止した直後にシェルが cat を再開させているのか、それとも最初から cat が SIGTSTP を受け付けないようになっているのかは定かではない。

ksh では、cat は組込みコマンドなので cat は元のシェル内で実行される。({ba,tc,z}sh では cat は分岐した子プロセスとして実行される) よって単に ksh で cat を実行しただけでは分岐は起きず、SIGTSTP で停止させようとしたときに初めて分岐して子プロセスが停止する。どうもこの ksh における cat の特殊な動作が悪いのではないかと思って、今度は echo `/bin/cat` を試してみた (これなら必ず組込みコマンドではなく外部コマンドが子プロセスで起動する) が、これでも無限 fork が発生した。

|

« コマンドラインシェルのマニアックな比較 | トップページ | コマンドラインシェルのマニアックな比較 その 3 »

コメント

コメントを書く



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




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/169172/17533207

この記事へのトラックバック一覧です: コマンドラインシェルのマニアックな比較 その 2:

» コマンドラインシェルのマニアックな比較 その 3 [まじかんと雑記]
その 2 の続き。 サブシェルでやったらどうなるの? ということで今度は (echo `cat`) を試した。 [続きを読む]

受信: 2007年12月31日 (月) 16時31分

« コマンドラインシェルのマニアックな比較 | トップページ | コマンドラインシェルのマニアックな比較 その 3 »