プロセス

プロセスとは

UNIX上において実行されている状態のプログラムのことをプロセスと言う。
プロセスにはその時点で独自のプロセス番号が割り当てられる。
そして、すべてのプロセスはプロセスは番号が1のプロセス(init)を祖先として、その子孫として作られてゆく。 (ちょうどディレクトリがルートディレクトリ( / )を元として作られているのと同じ形である)

UNIXではユーザーが自分で実行していないプロセスがたくさん実行されている。
それらはUNIXのシステムのために実行されているプロセスである。

テスト用プログラム

以下のプログラムをtest.cという名前で作り、コンパイルしておく。

main()
{
	while(1)
	{
		sleep(10);
	}
}

ジョブコントロールとは

ジョブコントロールとは フォアグラウンドとバックグラウンドを切替える機能のことである。

普通、コマンドはフォアグラウンドで実行される。
だが、コマンド起動時に&(アンパサンド)をつけて実行するとバックグラウンドで実行できる。
(フォアグラウンドで実行されているコマンドもCtrl+zによってバックグラウンドで実行できる)
そうしておくと、同じコンソールで他のコマンドを同時に実行できるので便利である。

ジョブ関係のコマンド

以下のコマンド( Ctrl+z, fg, bg )を使用すると何度でもフォアグラウンドとバックグラウンドを切替えて実行することができる。

使用例

# a.out &     <- a.outをバックグラウンドで実行
# jobs
[1]  - Running                       a.out    <- a.outがバックグラウンドで実行中(ジョブ番号は 1 )
# fg          <- a.outをフォアグラウンドで実行
a.out
Ctrl+z        <- a.outを一時的に停止
Suspended
# jobs
[1]  - Stopped                       a.out    <- a.outがバックグラウンドで停止中
# bg          <- 再びa.outをバックグラウンドで実行
[1]    a.out &
# jobs
[1]  - Running                       a.out    <- 再びa.outがバックグラウンドで実行中
# kill %1     <- a.outの実行を中止
# jobs        <- バックグラウンドで実行中のジョブは無い
#

バックグラウンドで実行する時の注意

バックグラウンドでコマンドを実行させると、そのコマンドから標準出力標準エラー出力に出力されるデータはそのまま現在のターミナルに出力されてしまう。 だからフォアグラウンドで vi などを使用していると画面が乱れてしまう。
このような時には、実行する時に出力をリダイレクションなどでファイルに書きこむ様にしておくとよい。

# a.out > data &     <- a.outの出力をdataに書き込みながらバックグラウンドで実行

プロセス関係のコマンド

使用例

# a.out &     <- a.outをバックグラウンドで実行
# ps          <- このコンソールで自分が実行しているプロセスだけ表示
 PID  TT STAT   TIME COMMAND
12782  p0 S      0:00 -tcsh 
24129  p1 S      0:00 a.out
24135  p1 R      0:00 ps           <- a.outのプロセス番号は24135
# ps -ef       <- このマシンで実行されているすべてのプロセスを表示
    USER   PID %CPU %MEM   VSZ   RSS  TT STAT  START   TIME COMMAND
abe      12177  0.0  0.5  1544   180   1 S    May 19   0:00 jtcsh 
abe      12767  0.0  0.2  1548    64   1 S     05:11   0:00 startx 
abe      24129  0.0  0.3  1944   120  p1 R     05:11   0:00 a.out 
 .         .     .    .    .      .    . .       .       .    .
 .         .     .    .    .  <- 長いので途中は省略
 .         .     .    .    .      .    . .       .       .    .
root     12568  0.0  0.1   812    40   2 S     00:18   0:00 getty 
root     12775  0.0  2.6  2704   828   1 S     05:11   0:01 xterm -geometry 89x 
root     12776  0.0  3.4  2808  1068   1 S     05:11   0:12 kterm -km euc -geom 
# ps -ef | grep a.out       <- a.outが含まれるプロセスだけを表示
abe      24129  0.0  0.3  1944   120  p1 R     05:11   0:00 a.out 
# kill 24129       <- a.outを中止させる
# ps
 PID  TT STAT   TIME COMMAND
12782  p0 S      0:00 -tcsh 
24146  p1 R      0:00 ps 

まとめ

参考


Prev | Next
Home | Contents
abe@injapan.net