我对线程、进程、execv等都很陌生。我已经研究并发现,当您执行一个execv时,它占用了调用进程的空间。我想知道,当您在main中创建一个线程,然后直接在线程之后调用execv (不是在线程完成之前,而是在创建线程之后),会发生什么。我知道execv将取代main,但这是否意味着它也将替换线程,或者线程是否能够正常地执行和完成?
我要问的一个小例子:
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
}我对此进行了测试,我确实经历了一些奇怪的行为,因为我的线程无法完成,所以我想知道这是否是原因。
发布于 2016-10-28 01:23:41
所有exec函数都用正在执行的程序替换整个进程。所有的线程都被销毁了。
如果您想在不影响当前进程的情况下执行另一个程序,您应该首先使用fork()创建一个新进程,并在子进程中调用execv()。有关在多线程程序中使用Is it safe to fork from within a thread?时需要注意的一些注意事项,请参见fork()。
https://stackoverflow.com/questions/40296502
复制相似问题