编写多进程程序,掌握fork()、exec()、wait()和waitpid()等函数的使用,进一步理解在Linux中多进程编程的步骤

编写多进程程序,掌握fork()、exec()、wait()和waitpid()等函数的使用,进一步理解在Linux中多进程编程的步骤,

要求: 程序有3 个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行“ls -l”指令,另一个子进程在暂停5s 之后异常退出,父进程先用阻塞方式等待第一个子进程的结束,然后用非阻塞方式等待另一个子进程的退出,待收集到第二个子进程结束的信息,父进程就返回;

源代码如下:

#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"
#include "sys/wait.h"
#include "sys/types.h"

int main()
{
    pid_t child1,child2,child;
    child1=fork();//创建子进程1
    if(child1 == -1 )//子进程1的出错处理
    {
	printf("子进程1报错\n");
	exit(1);//出现异常,退出
    }
    else if(child1 == 0)//执行子进程1的约定输出
	printf("我是子进程1,我的进程号是%d\n",getpid());
    else//父进程
    {
	child2=fork();//创建子进程2
        if(child1 == -1 )//子进程2的出错处理
        {
	   printf("子进程2报错\n");
	   exit(1);//异常退出
        }
	else if(child2 == 0)//执行子进程2的暂停
	{
	    printf("子进程2:等待5秒\n");
	    sleep(5);
	    printf("子进程2:结束了\n");
	    exit(0);
	}

	printf("我是父进程\n");
	child=waitpid(child1,NULL,0);//阻塞式等待
	if(child == child1)
	{
	    printf("我是父进程,子进程1的进程号是:%d\n",child);
	}
	else
	{
	    printf("出错了\n");
	}
	do
	{
	    child =waitpid(child2,NULL,WNOHANG);//非阻塞式等待
	    if(child == 0)
	    {
		printf("我是父进程,子进程2还没出现\n");
		sleep(1);
	    }
	}while(child == 0);

	if(child == child2)
	{
	    printf("我是父进程,子进程2的进程号是:%d\n",child);
	}
	else
	{
	    printf("出错了\n");
	}
    }
	exit(0);
}

运行结果截图:

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值