首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建线程后调用execv

创建线程后调用execv
EN

Stack Overflow用户
提问于 2016-10-28 01:15:28
回答 1查看 3.5K关注 0票数 4

我对线程、进程、execv等都很陌生。我已经研究并发现,当您执行一个execv时,它占用了调用进程的空间。我想知道,当您在main中创建一个线程,然后直接在线程之后调用execv (不是在线程完成之前,而是在创建线程之后),会发生什么。我知道execv将取代main,但这是否意味着它也将替换线程,或者线程是否能够正常地执行和完成?

我要问的一个小例子:

代码语言:javascript
复制
  int main(){
      printf("hello from main!);
      char *buffer = "some data";

    if(pthread_creat(&mythreadpid, NULL, thread1, buffer){
        printf("ERROR!!");
     }

     execv(...) //do execv here

}

void *thread1(void *buffer){
  printf("calling from my thread!");

 //do something else

}

我对此进行了测试,我确实经历了一些奇怪的行为,因为我的线程无法完成,所以我想知道这是否是原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-28 01:23:41

所有exec函数都用正在执行的程序替换整个进程。所有的线程都被销毁了。

如果您想在不影响当前进程的情况下执行另一个程序,您应该首先使用fork()创建一个新进程,并在子进程中调用execv()。有关在多线程程序中使用Is it safe to fork from within a thread?时需要注意的一些注意事项,请参见fork()

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40296502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档