利用 fork 分裂出新行程
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

int spawn(char *prog, char **arg_list) {    // Spawn為生育的意思
  pid_t child;    
  child = fork();     // 用fork()函數分枝出子行程
  if (child != 0) {     // 如果不成功
    return child;     //   傳回失敗的行程代碼
  } else {     // 否則
    execvp(prog, arg_list);     //   將 prog 參數所指定的
    fprintf(stderr, "spawn error\n");     // 程式載入到子行程中
    return -1;
  }
}

int main() {     // 主程式開始
  char *arg_list[] = { "ls", "-l", "/etc", NULL };    // ls -l /etc
  spawn("ls", arg_list);     // 開始分支
  printf("The end of program.\n");     // 印出主程式結束訊息
  return 0;
}

執行過程與結果

$ gcc fork.c -o fork

$ ./fork
The end of program.

$ total 94
-rwxr-x---  1 ccc Users  2810 Jun 13  2008 DIR_COLORS
drwxrwx---+ 2 ccc Users     0 Oct  7  2008 alternatives
-rwxr-x---  1 ccc Users    28 Jun 13  2008 bash.bashrc
drwxrwx---+ 4 ccc Users     0 Oct  7  2008 defaults
-rw-rw-rw-  1 ccc Users   716 Oct  7  2008 group
….
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License