【问题标题】:process exit and impact on threads进程退出和对线程的影响
【发布时间】:2014-05-06 07:46:41
【问题描述】:

在维护中,我看到项目代码(在 Linux 上的 c/c++ 中)调用 libc exit 函数以防出现一些不可恢复的错误。但是,此进程终止调用跨多个线程使用(每个线程都面临不可恢复的情况)。现在 -

  • 进程exit 是否可以从主线程以外的线程调用而没有任何副作用。
  • 无论何时调用exit(在主线程或任何其他线程中),它是否保证线程正常退出。

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

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

【问题讨论】:

  • '随机崩溃' - 有什么症状,发生了什么不应该发生的事情?

标签: c++ linux unix process operating-system


【解决方案1】:

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

关于第二个问题,请参阅上面的答案。简而言之,没有。线程不会“优雅地”退出(无论如何从应用程序的角度来看)。

【讨论】:

  • 我同意你的观点,但是在退出的过程中,如果另一个线程正在执行,会不会导致崩溃?内核态退出,是否保证其他线程被阻塞?
  • @kumar_m_kiran 我不认为线程会按特定顺序被杀死,所以我认为奇怪的事情不太可能发生。如果您可以复制崩溃,那么我建议您在调试器中运行您的应用程序以查看崩溃发生的时间和地点。
  • 我认为这样的“崩溃”很少见。在释放进程拥有的资源之前,操作系统确实会停止所有内核上的所有线程,因此很难想出在进程终止期间可能引发任何类型故障的场景。
猜你喜欢
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 2015-07-01
  • 2015-12-15
  • 2011-07-25
相关资源
最近更新 更多