c++ - 段错误进程 ID 和核心转储进程 ID 不同。为什么?

标签 c++ linux gdb segmentation-fault

在Linux消息文件中,我注意到进程14947报告了一个段错误,但我没有获得进程14947的核心转储,而是得到了14069.core。(它的生成时间与段错误发生的时间相匹配) )。

然后我使用 gdb 并查找:-

Program terminated with signal 11, Segmentation fault.
[New process 14947]
[New process 26131]
[New process 26130]
[New process 26129]
[New process 26128]
[New process 14945]
[New process 14842]
[New process 14726]
[New process 14598]
[New process 14069]

当我运行“信息线程”时,我得到:-

(gdb) info thread
10 process 14069  0xffffe410 in __kernel_vsyscall ()
9 process 14598  0xffffe410 in __kernel_vsyscall ()
8 process 14726  0xffffe410 in __kernel_vsyscall ()
7 process 14842  0xffffe410 in __kernel_vsyscall ()
6 process 14945  0xffffe410 in __kernel_vsyscall ()
5 process 26128  0xffffe410 in __kernel_vsyscall ()
4 process 26129  0xffffe410 in __kernel_vsyscall ()
3 process 26130  0xffffe410 in __kernel_vsyscall ()
2 process 26131  0xffffe410 in __kernel_vsyscall ()
* 1 process 14947  0x006a8300 in pthread_mutex_lock ()

这是我的问题:-

  1. 为什么核心转储文件名与消息文件中的段错误进程 ID 不匹配?
  2. 我认为 coredump 是针对特定进程的,为什么这里有这么多类似“[New process 26130]”的信息?
  3. 为什么“info thread”会显示进程的信息,而不是线程的信息?

谢谢!

另外:我的操作系统是 RHEL5。

最佳答案

在 Linux 中,内核线程只是轻量级进程(虚拟内存被标记为与父进程共享而不是标记为写时复制的进程),因此您看到列出的进程 ID 是与线程 ID 相同。这只是一个猜测,但核心的 ID 可能与处理信号的线程相同,可能与主线程不同。

关于c++ - 段错误进程 ID 和核心转储进程 ID 不同。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13832186/

相关文章:

c++ - 用 ofstream C++ 覆盖一行

c++ - 我如何使用 std::rotate 来旋转第一个成员为 const 的对数组?

c++ - Mac/IOS 是否使用与 Linux 内核相同的 sys/socket.h?

Linux Binutils 使用 'as' 组装 Mips

linux - make 中是否有等同于 -j 的 checkinstall 选项?

gdb - 在 gdb 中禁用打印漂亮

c - visual studio 2017 远程 gdb 调试器在哪里?

c++ - 在Qt中获取图像标签的实际边距

c++ - fork 与父子通信

c - OSX 上 Totalview 调试软件的问题