Segfault进程id和核心转储进程id是不同的。为什么?

时间:2012-12-12 03:11:11

标签: c++ linux gdb segmentation-fault

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

然后我使用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]

当我运行“info thread”时,我得到: -

(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. 为什么coredump文件名与消息文件中的segfault进程ID不匹配?
  2. 我认为coredump是针对特定流程的,为什么有这么多信息,如“[新流程26130]”?
  3. 为什么“info thread”会显示进程的信息,而不是线程?
  4. 谢谢!

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

1 个答案:

答案 0 :(得分:2)

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