execvp 返回后,为什么我的程序没有从中断处继续执行?

2024-04-13

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

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(使用前将#替换为@)

execvp 返回后,为什么我的程序没有从中断处继续执行? 的相关文章

随机推荐