创建线程后调用execv
Calling execv after creating a thread
我对线程、进程、execv 等非常陌生。我研究发现,当您执行 execv 时,它会占用调用进程的 space。我想知道当您在 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
}
我已经对此进行了测试,并且确实遇到了奇怪的行为,因为我的线程无法完成,所以我想知道这是否是原因
所有exec
函数用正在执行的程序替换整个过程。所有线程都被销毁。
如果想在不影响当前进程的情况下执行另一个程序,应该先使用fork()
创建一个新进程,然后在子进程中调用execv()
。有关在多线程程序中使用 fork()
时需要注意的一些注意事项,请参阅 Is it safe to fork from within a thread?。
我对线程、进程、execv 等非常陌生。我研究发现,当您执行 execv 时,它会占用调用进程的 space。我想知道当您在 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
}
我已经对此进行了测试,并且确实遇到了奇怪的行为,因为我的线程无法完成,所以我想知道这是否是原因
所有exec
函数用正在执行的程序替换整个过程。所有线程都被销毁。
如果想在不影响当前进程的情况下执行另一个程序,应该先使用fork()
创建一个新进程,然后在子进程中调用execv()
。有关在多线程程序中使用 fork()
时需要注意的一些注意事项,请参阅 Is it safe to fork from within a thread?。