Linux下進程的創建(system(); fork(); exec*())


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*();

參考文獻:

linux系統編程之進程(五):exec系列函數

Linux下execl學習

編譯中出現的錯誤:

使用execl()函數時出現warning: not enough variables to fit a sentinel

解決方法 - 調整execl中的參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM