我有一个像这样的代码块作为子线程运行:
if(someVar == 1){
doSomeStuff;
_exit(0)
}
else
execvp(*(temp->_arguments), temp->_arguments);
printf("I'm done\n");
当我使用 someVar == 1 运行程序时,我知道 _exit(0) 调用会终止我的线程。但是,当它设置为 0 时,为什么程序在 execvp() 调用后不继续执行 printf 语句?
If you exec* http://www.opengroup.org/onlinepubs/9699919799/functions/execvp.html(调用 exec 系列中的任何 exec 函数),然后新程序的代码将加载到当前进程中,并继续执行其主函数及其内容。成功执行这些函数后,它们将永远不会返回,因为您的printf
记忆中已经不存在了。
我认为你感到困惑exec*
与fork http://www.opengroup.org/onlinepubs/9699919799/functions/fork.html功能。这将拼接一个新的子进程,该子进程将运行与父进程相同的代码。
如果您想要创建一个与主线程共享数据和地址空间的新线程,您应该使用pthread_create http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_create.3.html功能。新进程不会共享数据,您必须使用其他机制(例如管道或共享内存)与其他进程进行通信。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)