0

我目前对第三个进程有问题,因为每次运行程序时它都不会工作。和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);
         }
    }
}
4

3 回答 3

2

至少我没有看到breakeach 的末尾case

在程序的情况下0会贯穿你所有的cases。

于 2013-03-06T14:38:48.123 回答
0

下面是我的建议,

1)建议一旦完成就清理子进程,如下所示,

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

2nd) 在每个 switch 语句后做 break

3rd) 并在输入 execlp 例程之前使用“whereis”命令验证可执行文件的路径。

于 2013-03-06T17:18:30.340 回答
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);
           ^ 

作为

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

试试看!!

于 2013-03-06T15:00:09.610 回答