パーソナルツール
現在の場所: ホーム オペレーティングシステム論 演習 2006年度 第3回
文書操作

index_html

作成者 管理者 最終変更日時 2007年04月22日 00時10分

exsh-3

1. コマンドをバックグラウンドで実行する機能を追加せよ.

具体的には,コマンドの最後に"&"を付けると,コマンドの実行を待たずに,次の入力を受け付けられるようにする.ただし,defunctプロセスの発生を避けるために,適切なタイミングでバックグラウンドジョブに対してwaitする必要がる.

実行例:

> sleep 3

とすると,次のプロンプトが出るまでに3秒かかるが,以下のように実行すると, すぐに次のプロンプトが表れる.

> sleep 3 &
>

2. cdコマンドを実現せよ.

教科書p.61にあるように,プロセスはworking directoryを状態の一部として持っている.cdは,working directoryを変更するshellの内部コマンドであり,/bin/pwd (print working directory)は現在のworking directoryを表示するコマンドである.

chdir()を用いてcdコマンドを実現せよ.

注意: 内部コマンドでない/bin/pwdが,現在のshellのworking directoryを正しく表示できる理由を説明せよ.

3. 発展.

  1. 終了した子プロセスの終了状態を表示する.以下のようにサブコマンド の戻り値が正しく表示されるか確認すること.
    > true &
    Backgroud job 28116
    > 改行入力
    Terminated process 28116 with return code 0.
    > false &
    Backgroud job 28117
    > 改行入力
    Terminated process 28117 with return code 1.
  2. 将来の拡張を考慮し,オプション解析にgetopt()を用いる.
  3. gets()にはセキュリティ上の問題がある.どのような問題か調べて対処せよ.

4. 解答例