多进程问题

多进程问题

int main(void)

{

    pid_t cpid;
    cpid = fork();

    if (cpid == -1){
        perror("[ERROR] fork(): ");
        exit(EXIT_FAILURE);

    }else if(cpid == 0){ 

        printf("The ChildA process < %d > running...\n",getpid());
        sleep(2);
        exit(88);

    }else if(cpid > 0){ 

 		cpid = fork();
        if (cpid == -1){
            perror("fork(): ");
        }else if (cpid == 0){ // second process

            printf("The childB process < %d > running...\n",getpid());
            sleep(2);
            exit(99);
            
        }else if (cpid > 0){
           	int status,rpid=0; 	
			rpid=wait(&status);
			
			if (rpid == -1){
           		 perror("[ERROR] wait() : ");
           		 exit(EXIT_FAILURE);
        	}

       		 printf("The Child Process < %d > has exited,exit code < %d >.\n",rpid,WEXITSTATUS(status));//通过 WEIXTSTATUS() 宏定义获取	
			 rpid=wait(&status);
			if (rpid == -1){
    	        perror("[ERROR] wait() : ");
        	    exit(EXIT_FAILURE);
        	}

       		 printf("The Child Process < %d > has exited,exit code < %d >.\n",rpid,WEXITSTATUS(status));//通过 WEIXTSTATUS() 宏定义获取


        }


        
    }   

    

    

    return 0;

}

老师这个代码执行的顺序是怎么样的呢,是先创建了子进程A还是子进程B,然后wait回调的时候是进程B先回来还是B进程先回来,还是说是随机的

正在回答

登陆购买课程后可参与讨论,去登陆

1回答
根据fork函数的返来分析就行,fork之后就两个进程了,返回值大于0,父进程满足条件,父进程执行大于0里面的代码。等于0,子进程满足条件,子进程执行等于0里面的代码。这段代码,是父进程先创建了一个子进程A,让后接着创建了一个子进程B,接着等待子进程退出。A和B两个子进程谁会先退出,看他们的睡眠时间,睡眠时间到了就退出了!
  • 这里的A进程和B进程都是睡眠2s,理论上应该是A先退出,因为A先创建。实际也可能是不确定的,这要看操作系统的进程调度算法,会先调度谁执行。

    2024-10-16 08:33:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师