在execvp返回之后,为什么我的程序没有从它停止的地方开始?

我有一个像这样的代码块作为子线程运行:

if(someVar == 1){ doSomeStuff; _exit(0) } else execvp(*(temp->_arguments), temp->_arguments); printf("I'm done\n"); 

当我用someVar == 1运行程序时,我知道_exit(0)调用会杀死我的线程。 但是,当它设置为0时,为什么程序在execvp()调用之后不继续并执行printf语句?

如果你exec* (从exec系列中调用任何exec函数),那么新程序的代码将被加载到当前进程中,并继续执行其主函数及其内容。 在成功执行这些函数后,它们将永远不会返回,因为printf不再存在于内存中。

我认为你将exec*fork函数混淆了。 这将拼接一个新的子进程,它将运行与父进程相同的代码。

如果你想要的是创建一个新线程,它与主线程共享数据和地址空间,你应该使用pthread_create函数。 新进程不会共享数据,您必须使用其他机制(如管道或共享内存)与其他进程通信。

除非发生错误,否则execvp()会使用新的可执行文件覆盖您的程序并且不会返回。 您需要先fork()然后在子进程上调用exec *。

因为execvp 您执行的进程替换了您正在运行的进程。 如果execvp返回,那是因为它失败了。 否则不应该返回。