next up previous
: Risa/Asir 使用上の注意 : 情報基礎理論演習メモ : その他

UNIX における複数プロセスの実行について

UNIX は, もともと複数の人が同時に一つのコンピュータを使えるように設計 された OS である. 「同時」といっても, CPU が一つしかない場合には, ある 瞬間に実行されているのは一つのプログラムだが, UNIX は, 一つのプログラ ム(プロセス)に非常に短い時間 (例えば 10ミリ秒)しか割り当てず, 時間が来 ると強制的にそのプロセスを停止させ, 他のプロセスをスタートさせる. これ を繰り返すことにより, あたかも多くのプロセスが同時に動いているように見 えるのである. 言い換えれば UNIX は, アクティブなプロセスを待ち行列とし て管理している.

さて, 端末エミュレータも一つのプロセスであり, その中でユーザからの入力 を待っているシェルも一つのプロセスである. シェルは他のプログラムを実行 するのが仕事であるが,


% emacs
とすると, emacs は起動するものの, シェルのプロンプトは表示されない. 何人かの人が経験したように, この状態で端末エミュレータに文字を入力 しても, 文字がオウム返しされるだけで何も起こらない. 実はこの状態では シェルは emacs の終了を待っている. これを, 「 emacs を フォアグラウンドで実行している」という. これに対し,

% emacs &
と実行すると,

[1] 60582 &
というようなメッセージを出してすぐにプロンプトが出る. これは, 呼び出したシェルと呼び出された emacs 双方がアクティブな プロセスとなっていることを意味する. この場合 「 emcas を バックグラウンドで実行している」という.

フォアグラウンドからバックグラウンドへの移行も可能である. 何かのプロセスをフォアグラウンド実行しているシェルに, \fbox {\tt CTRL}+\fbox {\tt z} を入力すると, 実行されているプロセスが一旦停止し, シェルのプロンプトが 出る. このとき bg を実行するとプロセスはバックグラウンドに移行する.


^Z
Suspended
% bg
[1]   emacs &



Masayuki Noro 平成14年2月25日