コマンドを実行すると、オペレーティングシステムによって番号が付けられ、追跡されるプロセスが開始されます。オペレーティングシステムには、あるプロセスが常に他のプロセスによって生成されるという柔軟な機能があります。たとえば、システムにログインしてシェルから vi(1) などのエディタを使用します。次に、vi(1) からシェルを起動します。その後 ps(1) コマンドを実行すると、次のように表示されます (ps -f コマンドの実行結果を示します)。
UID |
PID |
PPID |
C |
STIME |
TTY |
TIME |
COMD |
---|---|---|---|---|---|---|---|
abc |
24210 |
1 |
0 |
06:13:14 |
tty29 |
0:05 |
-sh |
abc |
24631 |
24210 |
0 |
06:59:07 |
tty29 |
0:13 |
vi c2 |
abc |
28441 |
28358 |
80 |
09:17:22 |
tty29 |
0:01 |
ps -f |
abc |
28358 |
24631 |
2 |
09:15:14 |
tty29 |
0:01 |
sh -i |
この例では、ユーザ abc は 4 つのプロセスを起動しています。プロセス ID (PID) と親プロセス ID (PPID) のカラムは、ユーザ abc がログオンしたときに起動されたシェルがプロセス 24210 であり、その親が初期化プロセス (プロセス ID は 1) であることを示しています。プロセス 24210 はプロセス 24631 の親プロセスで、以下も同様です。
プログラムは、その実行状態によっては他の 1 つ以上のプログラムの実行が必要な場合があります。1 つの実行可能プログラムのサイズを大きくするのは好まれないかもしれません。その理由は次のとおりです。
2 つ以上のモジュールを並行に実行させる必要がある場合がある
ロードモジュールが大きくなりすぎて、システムの最大プロセスサイズを超えてしまう
組み込みたい他のモジュールのオブジェクトコードをすべて使用するとは限らない
fork(2) 関数と exec(2) 関数を使用すると、新しいプロセス (生成しようとするプロセスのコピー) を生成し、実行中のプログラムの代わりに新しい実行可能プログラムを起動できます。