linux:有没有办法找出哪个进程生成了一个核心文件?

时间:2017-06-29 03:30:50

标签: c++ linux process gdb core

我的系统中生成了一些核心文件,但这些核心文件的后缀只有时间戳,没有进程ID信息。

所以在核心文件中有任何进程id相关信息,以便我可以从gdb或其他工具中知道它吗?

2 个答案:

答案 0 :(得分:1)

  

所以核心文件中有任何与进程id相关的信息

当然。

core文件中,有一组ELF注释。您要查找的注释类型为NT_PRPSINFO,它包含您想要的pr_pid(以及其他内容):

typedef struct prpsinfo {       /* Information about process                 */
  unsigned char  pr_state;      /* Numeric process state                     */
  char           pr_sname;      /* Char for pr_state                         */
  unsigned char  pr_zomb;       /* Zombie                                    */
  signed char    pr_nice;       /* Nice val                                  */
  unsigned long  pr_flag;       /* Flags                                     */
  uint32_t       pr_uid;        /* User ID                                   */
  uint32_t       pr_gid;        /* Group ID                                  */

  pid_t          pr_pid;        /* Process ID                                */
  pid_t          pr_ppid;       /* Parent's process ID                       */
  pid_t          pr_pgrp;       /* Group ID                                  */
  pid_t          pr_sid;        /* Session ID                                */
  char           pr_fname[16];  /* Filename of executable                    */
  char           pr_psargs[80]; /* Initial part of arg list                  */

} prpsinfo;

问题是:哪个工具可以找到并解码此注释。从elfutils尝试eu-readelf

答案 1 :(得分:-1)

是的,使用“file”命令。

file <core_file>

那应该告诉你什么可执行文件/命令导致核心转储。如果那不是您需要的,请告诉我。