0

それで、

同様の質問がたくさんありますが、私が使用できたものはありません。私のコードスニペットは次のとおりです。

for(int j=0; j<N; j++) {
    pid_t pid = fork();
    if (pid == -1) {
        exit(-1); //err
    } else if (pid == 0) {//kid
        stringstream ss;
        ss<<j;
        execlp("./sub","sub",ss.str().c_str(),NULL);
        exit(0);
    } else {
            /* parent */
    }
}

sub(.cpp)で実行しているコードは次のとおりです。

int main( int argc, char **argv )
{

   cout<<argv[i]<<endl;
   exit(0);
}

私の出力はそのようなものです:

[terminal prompt '$'] 4
2
3
etc.

exec呼び出しにプロンプ​​トが表示されないようにする方法はありますか?そして、なぜそれは最初のexec呼び出しでのみ表示され、すべてでは表示されないのですか?

4

1 に答える 1

1

親プロセスが非常に迅速に終了するため、表示されるのはシェルの通常のプロンプトです。exec呼び出しの出力ではありません。フォークされたプロセスは、親プロセスが終了した後に出力を出力します。

親プロセスで使用waitpid()して、すべてのフォークされたプロセスが終了するまで「待機」できます。

于 2013-03-13T19:30:26.497 に答える