簡體   English   中英

多個execlp無法正常工作

[英]Multiple execlp not working

我需要一些幫助。 運行程序后,我需要執行所有三個execlp(),但是發生的是只執行case 0,我將pid更改為1,而case1得到執行,依此類推。 嘗試將其放入for循環中,但不起作用。 我將中斷更改為繼續,但仍然相同-僅執行一個進程。 有什么建議么?

主要(){

pid_t pid;
pid= fork();
int i;

if(pid==0){

    for (i=0; i<3; i++){
        switch (i){
            case 0:
            execlp("/bin/cat", "cat", "wctrial.txt", NULL);
            break;

            case 1:     
            execlp("/bin/mkdir", "mkdir", "mydirectory", NULL);
            break;

            case 2:
            execlp("/bin/wc", "wctrial.txt", NULL);
            break;
        }
    }


}else{
    wait(NULL);
    printf("Child process completed!");
    exit(0);
}

}

man execlp

exec()系列函數當前過程映像替換為新的過程映像。

(重點是我的)

因此,一旦成功調用execlp ,該過程就不會重新執行舊代碼。

case 0:
    execlp("/bin/cat", "cat", "wctrial.txt", NULL);
    /* shouldn't go here */
    break; 

如果要執行這三個程序,則可以創建三個進程。 例如(循環展開):

pid_t son;

son = fork();

if (son == -1) /* report */
else if (son == 0) execlp("/bin/cat", "cat", "wctrial.txt", NULL);
else wait(NULL);

son = fork();

if (son == -1) /* report */
else if (son == 0)  execlp("/bin/mkdir", "mkdir", "mydirectory", NULL);
else wait(NULL);

/* ... */

另請參見基里連科的答案。 解決方案是使用system(..)而不是execlp(..)

手冊頁在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM