linux - uClibc 共享库在 exit() 期间卸载

标签 linux multithreading shared-libraries libc uclibc

我正在使用一个在初始化期间创建工作线程的共享库。该应用程序与 uClibc 链接。当它从 main() 返回时,它会在 __pthread_cond_wait() 中崩溃或从工作线程中崩溃,因为共享库没有从其 cleanup() 代码中正确停止。崩溃时的main()线程栈是:

#0 _dl_munmap from uClibc.so
#1 _dl_fini 
#2 __GI_exit 
#3 __uClibc_main

因为我没有共享库的源代码,所以我无法修复 worker 清理代码,但我的问题是:

为什么一旦 uClibc 开始卸载共享库,线程仍在运行(崩溃)?我假设它正在从上面的 _dl_munmap 堆栈条目中卸载它们。有没有办法确保在 main() 退出时所有线程都暂停/停止?

最佳答案

Why are threads still running

因为(或您链接的共享库)让它们运行。

Is there a way to make sure all threads are paused/stopped when main() exits

是的:需要安排线程终止。如果无法访问共享库源代码,您就无法真正做到这一点;您唯一的其他选择是调用 _exit(不应运行任何清理)而不是 exit(或者不是从 main 返回)。

关于linux - uClibc 共享库在 exit() 期间卸载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40919598/

相关文章:

linux - 如何使用 xargs 复制名称中包含空格和引号的文件?

java - 在Java 8中并行调用两个函数

linux - git版本在windows和linux之间是否兼容

linux - 如何在 "Open With"上的 Visual Studio Code 中禁用 gpu

linux - 这个 install.sh 是做什么的?

c++ - 让线程池的所有线程执行给定的函数

java - 如何确保一个线程在另一个线程之前启动?

c - 加载共享库 libpng16 时出错

c++ - 在 GDB 中的捕获点停止后退出

python - Cmake - 使用 OpenCV 生成共享库