进程退出和对线程的影响

process exit and impact on threads

本文关键字:影响 线程 退出 进程      更新时间:2023-10-16

在维护中,我看到项目代码(在linux上的c/c++中)在出现一些不可恢复的错误时调用libc exit函数。然而,这个进程终止调用是跨多个线程使用的(每个线程都面临不可恢复的场景)。现在-

  • 进程exit可以从非主线程的线程调用而没有任何副作用吗?
  • 无论何时调用exit(无论是在主线程中还是在任何其他线程中),它是否保证线程的优雅退出?

我理解标准(手册页)对此保持沉默,最好的方法是,启动所有线程的优雅终止,并使用通知机制,main线程必须被通知优雅终止。但是,由于这是一个正在维护的项目,所以想要在更改之前检查当前的行为是否正确。

我面临的问题是,我可以看到随机崩溃,其中一个线程在exit调用执行的正当过程下。

对于第一个问题,当您调用exit(从任何线程,主线程或子线程)时,进程立即退出。

对于第二个问题,请参见上面的答案。简而言之,没有。线程不会"优雅地"退出(至少从应用程序的角度来看)。