我是使用 linux 编程的新手,我试图了解 fork() 和 exec 函数是如何工作的。为了让自己更容易,我创建了一个简单的 Dummy 可执行文件(使用 gcc -o Dummy.exe ...)并尝试调用 fork 函数,以便我可以用我创建的 Dummy.exe 可执行文件替换孩子。
我遇到的问题是,当我运行代码时,它会显示 Dummy.exe 的内容,但是,我没有看到任何过去的内容 - 意思是,我没有看到父进程结束。
当我运行我的代码 Ex1.cpp 时,我得到了输出:
Program is Running
--- ****** ---
Ended
me@mdev>
我可以让程序结束的唯一方法是按回车键 - 你会在单词 Ended 之后看到一个空白行。
这是我的 Ex1.cpp 中的代码
#include <iostream>
using namespace std;
int main()
{
pid_t retVal;
int newStatus;
switch(retVal = fork())
{
case -1:
cout<<"Error occured with fork"<<endl;
break;
case 0:
cout<<"Child forked"<<endl;
newStatus = execl("Dummy.exe","Dummy.exe", NULL);
break;
default:
cout<<"Parent has a new child: "<<retVal<<endl;
}
cout<<"Ended ..."<<endl;
return 0;
}
我的 Dummy.cpp 代码如下:
#include <iostream>
using namespace std;
int main()
{
cout<<"Program is Running"<<endl;
cout<<"--- ****** ---"<<endl;
cout<<"Ended"<<endl;
return 0;
}
我的背景是 Windows 开发,这一切对我来说都是新的 - 感谢您的帮助。