0. system();
system()函數通過調用shell程序來執行所指向的命令(效率低),相當於先fork(),再execve();
特點:原進程和子進程各自運行,且原進程需要等子進程運行完后再繼續;
1. fork();
參考文獻: linux中fork同時創建多個子進程的方法(一)
在Linux中用fork()由一個父進程創建同時多個子進程的格式如下:
1 int status,idx; 2 3 for (idx = 0; idx < 10; idx++) { 4 status = fork(); 5 if (status == 0 || status == -1) break; // 每次循環時,如果發現是子進程就直接從創建子進程的循環中跳出來,不讓你進入循環,這樣就保證了每次只有父進程來做循環創建子進程的工作 6 } 7 8 if (status == -1) { 9 //error 10 } else if (status == 0) { // 每個子進程都會執行的代碼 11 //sub process 12 } else { 13 //parent process 14 }
參考文獻:進程控制:linux中fork同時創建多個子進程注意事項
/* 這里不可以一下就創建完子進程,要用 *要 創建-》判斷-》使用-》return or exit.更不能這樣如test2.c *childpid1 = fork(); *childpid2 = fork(); *childpid3 = fork(); */ childpid1 = fork(); //創建 if(0 == childpid1) //判斷 { //進入 printf("In child1 process\n"); printf("\tchild pid = %d\n", getpid()); exit(EXIT_SUCCESS); //退出 }
2. exec*();
參考文獻:
編譯中出現的錯誤:
使用execl()函數時出現warning: not enough variables to fit a sentinel
解決方法 - 調整execl中的參數
