我有一个像这样的代码块作为子线程运行:
if(someVar == 1){
doSomeStuff;
_exit(0)
}
else
execvp(*(temp->_arguments), temp->_arguments);
printf("I'm done\n");
当我用someVar == 1运行程序时,我知道_exit(0)调用会杀死我的线程。但是,当它设置为0时,为什么程序在execvp()调用之后不继续并执行printf语句?
答案 0 :(得分:7)
如果你exec*
(调用exec系列中的任何exec函数),那么新程序的代码将被加载到当前进程中,并继续执行其主函数及其内容。在成功执行这些函数后,它们将永远不会返回,因为您的printf
不再存在于内存中。
我认为您将exec*
与fork
功能混淆了。这将拼接出一个新的子进程,该进程将运行与父进程相同的代码。
如果你想要的是创建一个与主线程共享数据和地址空间的新线程,你应该使用pthread_create
函数。新进程不会共享数据,您必须使用其他机制(如管道或共享内存)与其他进程通信。
答案 1 :(得分:2)
答案 2 :(得分:2)
因为execvp
替换 运行的进程 exec 'ed。如果 execvp 返回,那是因为它失败了。否则不应该返回。