0

プログラムを実行するたびに機能しないため、現在3番目のプロセスで問題が発生しています。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

少なくともbreak、 each の最後に が表示されませんcase

0プログラムの場合、すべてのcases を実行します。

于 2013-03-06T14:38:48.123 に答える
0

以下は私の提案です、

1番目)提案は、以下のように、実行された後の子プロセスのクリーンアップです。

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

2番目)各switchステートメントの後に中断します

3番目)また、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 に答える