进程控制编程实验

  1. 有3个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行“ls -la”指令,另一个子进程在暂停10s内通过kill命令使其异常退出,父进程先用阻塞方式等待第一个子进程的结束,然后用阻塞方式等待第二个子进程的退出,待收集到第二个子进程结束的信息,父进程就返回。
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
int main(void){	
	pid_t child1,child2,child,rtn_wait;
	int child_stat;			
	printf("Father:my pid=%d\n",getpid());
			
	//创建子进程child1	
	child1=fork();		
	
	//子进程child1的出错处理	
	if(child1==-1){		
		printf("Child1:Fork child1 error!\n");
		exit(1);//异常退出	
	}		
	//子进程1调用execl()函数	
	else if(child1==0){		
		printf("Child1:my pid=%d,my father pid=%d\n",getpid(),getppid());		
		if(execlp("ls","ls","-l","-a",NULL)<0){									
			printf("Child1:execl failed!\n");		
		}	
	}		
	else{		
	//创建子进程child2				
		child2=fork();				
	//子进程child2的出错处理		
		if(child2==-1){			
			printf("Child2:Fork child2 error!\n");	
			exit(1);
		}				
	//子进程2暂停10秒		
		else if(child2==0){							
			printf("Child2:my pid=%d,my father pid=%d\n",getpid(),getppid());			
			sleep(10);			
			exit(0);		
		} 				
		if(child1>0){
			rtn_wait=wait(&child_stat);
			if(WIFEXITED(child_stat)==1)
				printf("子进程1正常终止,子进程返回值:%d\n",WEXITSTATUS(child_stat));
			if(WIFSIGNALED(child_stat)==1)
				printf("子进程2非正常终止,结束进程信号:%d\n",WTERMSIG(child_stat));		
		}		
		if(child2>0){
			rtn_wait=wait(&child_stat);
			if(WIFEXITED(child_stat)==1)
				printf("子进程2正常终止,子进程返回值:%d\n",WEXITSTATUS(child_stat));
			if(WIFSIGNALED(child_stat)==1)
				printf("子进程2非正常终止,结束进程信号:%d\n",WTERMSIG(child_stat));		
		}	
	}	
	exit(0);
}

运行结果:
在这里插入图片描述
在这里插入图片描述

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值