我有一个像这样作为子线程运行的代码块:
if(someVar == 1){
doSomeStuff;
_exit(0)
}
else
execvp(*(temp->_arguments), temp->_arguments);
printf("I'm done\n");
当我使用 someVar == 1 运行程序时,我知道 _exit(0) 调用会杀死我的线程。但是,当它设置为 0 时,为什么程序在 execvp() 调用后不继续执行 printf 语句?
我有一个像这样作为子线程运行的代码块:
if(someVar == 1){
doSomeStuff;
_exit(0)
}
else
execvp(*(temp->_arguments), temp->_arguments);
printf("I'm done\n");
当我使用 someVar == 1 运行程序时,我知道 _exit(0) 调用会杀死我的线程。但是,当它设置为 0 时,为什么程序在 execvp() 调用后不继续执行 printf 语句?
如果您exec*
(调用 exec 系列中的任何 exec 函数),则新程序的代码将加载到您当前的进程中,并继续执行其 main 函数及其内容。成功执行这些函数后,它们将永远不会返回,因为您printf
的内存中不再存在。
我认为您exec*
对fork
功能感到困惑。这将拼接出一个新的子进程,它将运行与父进程相同的代码。
如果您想要创建一个与主线程共享数据和地址空间的新线程,您应该使用该pthread_create
函数。新进程不会共享数据,您必须使用其他机制(如管道或共享内存)与其他进程通信。
因为用你exec的进程execvp
替换你正在运行的进程。如果execvp返回,那是因为它失败了。否则它不应该返回。