0

IamはC言語でプログラミングし、プロセスをフォークする概念を学習しようとしていますが、btiamは次のプログラムの出力と混同されています。先に進むには、これに関する説明が必要です。

        int main() {
            pid_t pid;
 24         int status, died;
 25         switch(pid = fork()){
 26                 case -1: printf("Can't fork\n");
 27                          exit(-1);
 28                 
 29                 case 0 : printf(" Child is sleeping ...\n"); 
 30                          sleep(5); // this is the code the child runs
 31                          //exit(3); 
 32                          
 33                 default:
 34                          printf("Process : parent is waiting for child to exit\n");
 35                          died = wait(&status); // this is the code the parent runs 
 36                          printf("Child's process table cleared...\n");
 37         }
 38         return 0;
 39 }

The output of the above program is :

Process : parent is waiting for child to exit
Child is sleeping ...
Process : parent is waiting for child to exit
Child's process table cleared...
Child's process table cleared...

ここで、この「子のプロセステーブルがクリアされた...」が2回発生する理由がわかりません。plsは説明します。

プラットフォーム:Linux、gccコンパイラ

4

2 に答える 2

6

break子のステートメントには何もないため、子もステートメントcaseを実行しますdefault

コメントアウトしたようですexit(3)。そこにあったらもっと良かったでしょう。

于 2012-05-10T06:37:54.163 に答える
0

私はそれを私が欠けていたものを手に入れました...それはそこにbreakステートメントがないためです。私がbreakまたはexit()を使用したとしたら、出力はこのようにはならなかったでしょう。ありがとう。

于 2012-05-10T06:43:50.197 に答える