Yash 2 その 117
Sleep や cat も組込みコマンドにするとしたらどうするかなと考えた。
Sleep と cat が組込みコマンドになっているシェルは ksh くらいだが、cat はよく使うコマンドなので組込みにすることでそれなりに高速化が見込める。Sleep はそもそも高速化する意味がないけど……。
Sleep や cat を組込みにする上で一番の問題はこれらのコマンドが SIGINT や SIGTSTP によって中断された場合の動作だ。普通の組込みコマンドはシェルのプロセス内でそのまま実行されるので、sleep や cat を他の組込みと同様に実装するとジョブ制御が有効なシェルでは SIGINT や SIGTSTP でコマンドを中断することができなくなってしまう。(まあそれでも一応 POSIX には準拠していることになるんだけれど)
そこで、ジョブ制御が有効なシェルでは、sleep や cat は別のプロセスで実行するようにするという案を思いついた。こうすればシグナルによってこれらのコマンドが実行されているプロセスを中断できる。組込みなのに常にサブシェルで実行されるというこのちょっと特殊なコマンドを実装するには、特殊組込み
準特殊組込み
通常の組込み
の他に割り込み可能組込み
なる新たな組込みコマンドの分類が必要になろう。
あと、cat は実装によって使えるオプションがまるで違うので、echo のように環境変数で使えるオプションを選択する仕組みが要るな。
まあ、実際に sleep と cat が組込みとして実装されるとしてもそれは basename/dirname ともども先の話だが。
| 固定リンク
コメント