シェル上のプロセスの動作状態(フォアグラウンド/バックグラウンド/サスペンド)とその制御について(前半)
動作状態
端末のシェルから起動されたプロセスには以下の動作状態がある。
- フォアグラウンド(最前面で実行)
- バックグラウンド(背後で実行)
- サスペンド(一時停止)
以下、それぞれについて記述する。
フォアグラウンド
普通に起動されたプロセスはそのままそこで最前面(フォアグラウンド)のプロセスとして動作し、このプロセスを操作対象*1として、バックグラウンドもしくはサスペンドの状態へ移行させることが可能な他、Ctrl+Cで強制終了することもできる。*2
処理が終わるまではシェルの入力待ち状態にはならず、シェル上で次のコマンドの入力などの操作を行うことはできない。
GUIのアプリケーションをフォアグラウンドで起動すると、(内部的に無限ループしているために)そのアプリケーションを終了するまでの間、そのシェル上では操作が行えない。*3また、GUIのアプリケーションをサスペンドすると、ユーザインターフェースは無反応になる。*4
バックグラウンド
プロセスは背後で動かすことができ、その状態をバックグラウンド状態という。
バックグラウンド状態のプロセスが動作している間も、そのシェル上ではプロセスの動作を意識せずに別の操作(コマンドの入力など)が行える。
ジョブとその一覧表示
シェル上のプロセスがバックグラウンドあるいはサスペンド状態になったときに、それを制御するために固有の番号(ジョブ番号)が割り当てられ、それぞれのプロセスは「ジョブ」として管理される。
シェルの組み込みコマンドjobsを用いるとジョブの一覧を表示でき、どちらの状態のプロセスもないときには
$ jobs (何も出力されない)
このように何も表示されず、いずれかの状態のプロセスが存在する場合には
$ jobs [1]- Stopped gedit [2]+ Stopped ghex2 [3] Running gimp & [4] Running sylpheed &
のように一覧が表示され、サスペンド状態のプロセスには「Stopped」、バックグラウンド状態のプロセスには「Running」と表示される。
「+」の付いたジョブは後半で扱うfgやbgといったコマンドを引数なしで実行したときに選択される。
(「シェル上のプロセスの動作状態(フォアグラウンド/バックグラウンド/サスペンド)とその制御について(後半)」に続く)
関連記事:
関連URL:
- http://www-theorie.physik.unizh.ch/~dpotter/howto/daemonize - デーモン化の実際(C言語のサンプルを含む)