【发布时间】:2017-03-10 20:09:28
【问题描述】:
我对线程,进程,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
}
我已经对此进行了测试,但我确实遇到了奇怪的行为,因为我的线程无法完成,所以我想知道这是否是它的原因
【问题讨论】:
-
execv替换整个进程,而不仅仅是一个线程。 -
所以它将替换我从 main AND main 创建的线程?
-
是的,当前进程的所有内存和状态都被exec覆盖了,除了环境和打开的文件描述符。
-
好的,如果我要创建一个进程而不是线程,或者新进程不会被替换,这会是一样的吗?
-
子进程狂野地执行新代码而不是他的父进程。在 C 中使用 fork()