1

私はforkとがexec初めてで、次のプログラムを試しました。

プログラム 1:

int main(int argc, char *argv[]){
    pid_t pid;
    int status;
    pid = fork();
    if(pid == 0){
        printf("new process");
        execv("p1",argv);
        }
    else{
        pid_t pr = wait(&status);// I am trying to get the exit value
                                //  of the sub process.
        printf("the child process exit with %d",status);
        printf("father still running\n");
    }
}

プログラム 2:

int main(){
    std::cout<<"I am the new thread"<<std::endl;
    sleep(1);
    std::cout<<"after 1 second"<<std::endl;
    exit(1); 
}

最初のプログラムを実行すると、「子プロセスは 256 で終了します」という出力が表示されます。256の代わりに結果が表示されるのはなぜ1ですか? に変更exit(1)するexit(2)と、結果が になる512のはなぜですか? 0を返す場合にのみ機能しました。

4

1 に答える 1

3

システムコールから返されるステータス値はwait、必ずしも子プロセスが終了したものとは限りません。

以下のように、他にも返される情報がいくつかあります。

  • プロセスは正常に終了しましたか?
  • シグナルで終了しましたか?
  • それを終わらせた信号は何ですか?
  • コアをダンプしましたか?

終了コードを抽出するには、マクロを使用します。

WEXITSTATUS(status)

それと、より多くの情報を提供できるマクロは、こちらwaitのようなマンページで利用できるはずです。

于 2014-08-31T07:35:03.037 に答える