まず,system関数を使ってみる.
これは,一番簡単かもしれない.
中身は/bin/sh -c コマンド名でシェル経由でプロセスを生成しているようである.
まず,外部アプリケーションとなるhogeのhoge.cを以下に示す.

#include <stdio.h>
int main( int argc, void**argv ) {
int i = 0;
for( i = 0; i < 10; i++ ) {
printf( "%d sec passed.\n", i );
sleep( 1 );
}
printf( "hoge has finished.\n" );
return 0;
}

たんに1秒間待つ処理を10回繰り返すだけのもの.
それをsystem関数を使って起動するsystemのsystem.cを以下に示す.

#include <stdio.h>
int main( int argc, void**argv ) {
system( "../hoge/hoge" );
printf( "system has finished.\n" );
}

このsystemを実行するとhogeのプロセスが生成され,実行される.
実行結果は,以下のようになる.

$ ./system
0 sec passed.
1 sec passed.
2 sec passed.
3 sec passed.
4 sec passed.
5 sec passed.
6 sec passed.
7 sec passed.
8 sec passed.
9 sec passed.
hoge has finished.
system has finished.

プロセスは,以下のように見える.

sonson    8753   0.0  0.0   599616    296 s001  S+   10:53AM   0:00.00 ../hoge/hoge
sonson    8752   0.0  0.0   591424    284 s001  S+   10:53AM   0:00.00 ../system/system

system関数は,バックグラウンドで動かさない場合は,親プロセスは,子プロセスが終わるのを待つようである.
system関数は,ワイルドカードなども使えるらしい.
並列処理も実は,&で簡単に実現できてしまう.

#include <stdio.h>
int main( int argc, void**argv ) {
system( "../hoge/hoge &" );
printf( "system has finished.\n" );
}

こうやって,バッググラウンドでhogeを起動すると,以下のような実行結果になる.

$ ./system
system has finished.
$ 0 sec passed.
1 sec passed.
2 sec passed.
3 sec passed.
4 sec passed.
5 sec passed.
6 sec passed.
7 sec passed.
8 sec passed.
9 sec passed.
hoge has finished.

プロセスは,以下.プロセス番号をつかえまえるために,getcharをしこんで,データを取った.
状態にS+とSで差がみられる.

sonson    8797   0.0  0.0   599616    284 s001  S+   10:55AM   0:00.00 ./system
sonson    8800   0.0  0.0   599616    296 s001  S    10:56AM   0:00.00 ../hoge/hoge

うーむ.自由度が高いし,使いやすい.