我有一个像这样的代码块作为子线程运行:
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
函数.新进程不会共享数据,您必须使用其他机制(如管道或共享内存)与其他进程通信.