Windows,fork和execv

时间:2012-08-13 14:56:27

标签: c windows unix

我收到了一个我想在Windows下运行/编译的Unix工具。看了之后,我发现它使用forkexecv等。我现在想要了解它的作用以及如何在Windows中实现这一点。

代码不仅仅是在这里提出的,所以请不要评论这段代码是否有意义。

pid = fork();
if(pid==0){
    execv("/usr/bin/java",args);
}

如果我正确地解释了这个,那么这个只会像使用java数组中提供的参数调用args一样。所以在Windows中,这可以通过system()CreateProcess轻松实现(我没有阅读如何来做,只知道可以做到)。

但这是我的问题:如果我理解正确,这段代码会分叉并调用execv因为execv没有返回,并且我的程序无法完成而不首先使用它。这是对的吗?

2 个答案:

答案 0 :(得分:4)

Fork创建子进程,其pid与父pid不同。在您的代码中,您调用fork来运行另一个进程而不关闭当前(父)进程。

在调用fork并进入子进程后,我们调用execv(); execv()函数用新的过程映像替换当前过程映像,它将在传递args的情况下执行java程序。

父进程必须等待子进程完成,以便子进程不会成为僵尸进程(没有父进程的子进程)

答案 1 :(得分:3)

  

execv不会返回,我的程序也不会   完成而不先分叉。这是对的吗?

实际上你的程序会变成exec'd程序。即在exec之后,新程序将开始执行,但过程将是相同的:相同的PID,相同的少数继承属性等。