unc*_*der 2 c pthreads process execv
我对线程,进程,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
}
Run Code Online (Sandbox Code Playgroud)
我已经测试了这个并且我确实遇到了奇怪的行为,因为我的线程无法完成,因此我想知道这是否是它的原因
所有exec功能都用正在执行的程序替换整个过程.所有线程都被破坏了.
如果要在不影响当前进程的情况下执行其他程序,则应fork()首先使用创建新进程,然后调用execv()子进程.请参阅从线程中分叉是否安全?fork()在多线程程序中使用时要注意一些注意事项.