第三个过程“wc”将无效

时间:2013-03-06 14:30:46

标签: c fork

我目前遇到第三个过程的问题,因为每次运行程序时它都不会工作。和exit()部分的建议因为打印多个子进程!有什么建议?

我真的很感激它!

main(){
    pid_t son;
    int i;  
    for (i=0; i<3; i++){
        switch (i){
            case 0:
            son = fork();
                if (son<0){
                    fprintf(stderr, "Fork failed!");
                    //exit(-1);
                }else if (son == 0){
                    execlp("/bin/cat", "cat", "wctrial.txt", NULL);
                }else{
                wait(NULL);
                printf("Child process completed!");
                //exit(0);
                }
            case 1:
            son = fork();
                if (son<0){
                    fprintf(stderr, "Fork failed!");
                    //exit(-1);
                }else if (son == 0){
                    execlp("/bin/mkdir", "mkdir", "mydirectory", NULL);
                }else{
                wait(NULL);
                printf("Child process completed!");
                //exit(0);
                }
            case 2:
            son = fork();
                if (son<0){
                    fprintf(stderr, "Fork failed!");
                    //exit(-1);
                }else if (son == 0){
                    execlp("/bin/wc","wc","wctrial.txt", NULL);
                }else{
                wait(NULL);
                printf("Child process completed!");
                //exit(0);
         }
    }
}

3 个答案:

答案 0 :(得分:2)

至少我看不到每个break末尾的case

对于0,该程序将贯穿您的所有case

答案 1 :(得分:0)

实际上break是问题,如果案例1执行,那么2,3也会。(但这不是wc无法正常工作的问题

  

为什么wc无效?

由于wc命令的路径!

在您的系统路径中,wc可能不是:"/bin/wc"

在系统中搜索wc命令的路径,如:

:~$ whereis wc
wc: /usr/bin/wc   

并更改

 execlp("/bin/wc","wc","wctrial.txt", NULL);
           ^ 

as

 execlp("/usr/bin/wc","wc","wctrial.txt", NULL);
          ^ 
          // actually not exactly this but one that appears in your system. 

试一试!!

答案 2 :(得分:0)

以下是我的建议,

  

第一)建议一旦清理儿童过程   完成,如下所示,

 }else if (son == 0){
        execlp("/bin/mkdir", "mkdir", "mydirectory", NULL);
        _exit(0);
 }
  

2nd)在每个switch语句后断开

     

3rd)并且还使用&#34; whereis&#34;来验证可执行文件的路径。   在进入execlp例程之前执行命令。