当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在execvp返回之后,为什么我的程序不会从它停止的地方开始?》经验,为你挑选了1个好方法。

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

if(someVar == 1){
doSomeStuff;

_exit(0)
}
else
   execvp(*(temp->_arguments), temp->_arguments);
printf("I'm done\n");

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



1> Johannes Sch..:

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

我觉得你混淆exec*了这个fork功能.这将拼接出一个新的子进程,该进程将运行与父进程相同的代码.

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

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有