自作シェルでcdが動かない

シェルを作成する課題でつまづいたので、メモ。

課題の概要は、fork()して子プロセスを生成し、そこでexec()してコマンドを実行するシェルを作るというものです。pwdとかlsは正常に実行されるのですが、cdが実行されずにつまりました^^;

調べてみると、カレントディレクトリの設定はプロセス毎に保存されてるから、子プロセスでcdしても親プロセスのカレントディレクトリは変更されないんですね。

ということで、cdコマンドを入力されたときはfork()せずに、exec()してみました。

…がうまくいかない!

exec()したら自作シェルが終了してしまい、プロンプトが表示されませんでした。どうやら、exec()したらそのプロセスは終了してしまうようです。

結局exec()を使用せずに、chdir()システムコールを使ってディレクトリを変更したらうまくいきました。



コマンドを呼び出すときは、それがプロセス属性に依存していないか確認することが大事だなぁ。