计算机系统平台实验——使用exec函数写一个多进程的程序执行另一个程序(含源码)

本文介绍了如何在Linux环境下,使用C++通过exec函数创建多进程来执行另一个程序。实验内容包括父进程创建子进程,子进程调用指定命令,如excel,然后父进程等待并获取子进程的返回值。通过这个过程,作者加深了对进程控制和多进程编程的理解。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


实验目的

了解系统进程的查看和控制,了解多进程程序的设计与执行。

实验截图

多进程读取存储目录

实验内容

父进程获得要执行的命令,并且交给子进程执行。父进程等待子进程结束,并且打印子进程的返回值。

一、实验步骤

(1)主进程执行
(2)fork创建子进程
(3)子进程成功创建后,调用excel函数,执行要求操作
(4)新进程退出,被主进程获取返回值
(5)父进程退出,程序结束

二、程序和运行代码

1.引入头文件,使用命名空间

#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<errno.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<cstdlib>
using namespace std; 

2.多进程读取目录

int main(int argc,char *argv[])
{      
pid_t pid;
int status;

        cout<<"OriginalID:"<<getpid()<<endl;
	printf("process begin...\n");
        string as="ls";
        pid=fork();
	
        
        if(0 == pid)
        {
        cout<<"Child created"<<endl;
        cout<<"Child process ID:"<<getpid()<<endl;
        execl("/bin/ls", "ls", NULL);//表示后边的参数为可变参数,以一个空指针结束。第一个参数就是程序名。
        cout<<"Now, child process end with:0"<<endl;
        exit(0);
        }
        wait(&status);
        if(WIFEXITED(status))
    {
        cout<<"This is father process. Child process end with:"<<WEXITSTATUS(status)<<endl;
        //printf("this is parent, child normal, status = %d\n",WEXITSTATUS(status));
    }
        
	cout<<"Father process end with:0"<<endl;
	return 0;

实验心得

在这次实验中,我学会了在C++之中调用excel函数,利用它与fork配合,在新进程中调用程序。我对excel的使用有了初步了解,对exce类型的函数也有了初步认识,学会了exce类最简单的使用方法。我学会了观察一个进程是否退出以及汇报它的返回值。

本课程资源包

我整理了本课程一学期的四次实验和作业,带有详解,内含期末复习资料和课件。链接:

链接:https://pan.baidu.com/s/1cvvO_ntbqad5Xa-hbvHZQg 
提取码:f2t0 
复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V1的分享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值