子プロセスの起動

fork 関数により子プロセスを起動し、メインのプロセスとは別の処理を開始するための例題です。

今回は、子プロセス内にて数値を1秒後とにインクリメントし、表示しているのみですが、無限ループで処理を終了させずに処理を行い続けるという例題等を考えても良いかもしれません。
その際、ps コマンド等でプログラムのプロセスIDを調べ、

Gami[363]% ps
      PID    PPID    PGID     WINPID  TTY  UID    STIME COMMAND
     1284       1    1284       1284  con 1003 20:21:47 /usr/bin/tcsh
     2764       1    2896       2764  con 1003 21:46:15 /cygdrive/c/home/murakami/list_46
     1788    1284    1788       3832  con 1003 21:46:16 /usr/bin/ps
Gami[364]% kill 2764
というような感じで、処理を強制的に終了することが可能です。

子プロセスの起動list_46.c)
/*----------------------------------------------------------------------
  list_46.c: 子プロセスの起動
  ----------------------------------------------------------------------*/
#include <stdio.h>

void cproc()
{
    int i;
    for(i=0;i<10;i++){
        sleep(1);
        fprintf(stderr,"cproc:%d\n",i);
    }
}

int main(int argc,char* argv[])
{
    int pid;
    /* プロセスの実行 */
    if((pid=fork()) == -1){
        perror("fork");
        exit(1);
    } else if(pid == 0){
        /* 子プロセス */
        cproc();
    }
    printf("pid=%d\n",pid);
    printf("**end of parent process..\n");
    /* 親プロセスの終了 */
    exit(0);
}
実行結果
Gami[358]% ls
list_46.c  list_46.exe*  list_46.o
Gami[359]% list_46
pid=1572
**end of parent process..
Gami[360]% cproc:0
cproc:1
cproc:2
cproc:3
cproc:4
cproc:5
cproc:6
cproc:7
cproc:8
cproc:9
pid=0
**end of parent process..
inserted by FC2 system