操作系统——要求父进程创建子进程,在子进程中分别用exec函数与system函数执行“dir -a”。并分析其区别。
实验结果:
分析区别:
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++)
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