首页 > 技术文章 > 操作系统——要求父进程创建子进程,在子进程中分别用exec函数与system函数执行“dir -a”。并分析其区别。

wsgxg 2021-07-15 14:19 原文

操作系统——要求父进程创建子进程,在子进程中分别用exec函数与system函数执行“dir -a”。并分析其区别。

1.直接跳转到Linux端生产数据代码


实验结果:

分析区别:

       system()和exec()都可以执行进程外的命令,system会新起一个子进程来调用要执行的命令。而exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。system()和exec()都有能产生返回值,system的返回值并不影响原有进程,但是exec的返回值影响了原进程。

       在代码中通过替换
       cout<<"exec函数"<<endl;
       execl("/usr/bin/dir","dir","-a",NULL);
       和
       cout<<"system函数"<<endl;
       system("dir -a");
       的顺序观察到现象,先执行execl(),再执行system(),system()报错;先执行system(),再执行execl(),都能正常输出。

Linux效果图(采用UOS + VScode + g++)


image


C++代码:

#include<sys/types.h>
#include<unistd.h>
#include<iostream>
using namespace std;
int main() {
	pid_t value, value1;
	value=fork();
	if(!value) {
		cout<<"system函数"<<endl;
		system("dir -a");
		cout<<"exec函数"<<endl;
		execl("/usr/bin/dir","dir","-a",NULL);
	} else {
		cout<<"ERROR!";
	}
}
//g++ TEST.cpp -o TEST&&./TEST

推荐阅读