线程调用execve()执行文件时会产生什么运行效果?
关于execve调用对多线程进程的影响解答
首先直接给出结论:你假设的多副本、各保留不同寄存器值的情况完全不会发生。
- 当多线程进程中的任意一个线程调用
execve时,内核会第一时间终止该进程内的所有其他线程,不会保留任何原有线程的执行上下文(包括寄存器、程序计数器等所有状态)。 execve会清空整个进程的原有用户地址空间,替换为新加载可执行文件的地址空间布局,全进程共享同一个地址空间,不存在多个地址空间副本的说法。execve调用成功后,整个进程只会存在一条执行流,从新加载程序的入口点开始执行,所有原有线程的状态都会被完全清除,不可能出现多个新程序副本同时运行、各持有不同程序计数器的情况。
补充区分:不要将
execve和fork的行为混淆。fork创建子进程时,只会复制调用fork的线程的执行上下文到子进程,子进程内也仅会存在这一个存活线程,同样不会复制所有原有线程的状态。
内容的提问来源于stack exchange,提问作者Aaa Bbb
相关产品推荐
相关产品推荐

