代码之家  ›  专栏  ›  技术社区  ›  Joe Holloway

是否可以获取正在运行的进程及其符号表的核心转储?

  •  50
  • Joe Holloway  · 技术社区  · 16 年前

    是否可以获取gdb或使用其他一些工具来创建正在运行的进程及其符号表的核心转储?如果有一种方法可以在不终止进程的情况下实现这一点,那就太好了。

    如果可能,您将使用什么命令?(我尝试在Linux设备上执行此操作)

    4 回复  |  直到 6 年前
        1
  •  60
  •   Assaf Lavie    9 年前
    $gdb——PID=26426
    (GDB)GCORE
    已保存corefile core.26426
    (GDB)分离
    
        2
  •  51
  •   iblue    10 年前

    或运行 gcore $(pidof processname) .

    这有一个好处(超过了运行gdb和向cli发出命令),您可以在尽可能短的时间内附加和分离。

        3
  •  0
  •   brokenfoot    8 年前

    注: 以下方法将终止正在运行的进程,同时需要符号。

    您可以将以下信号之一(action=core)发送到正在运行的进程:
    来自: http://man7.org/linux/man-pages/man7/signal.7.html

           Signal     Value     Action   Comment
           ──────────────────────────────────────────────────────────────────────
           SIGHUP        1       Term    Hangup detected on controlling terminal
                                         or death of controlling process
           SIGINT        2       Term    Interrupt from keyboard
           SIGQUIT       3       Core    Quit from keyboard
           SIGILL        4       Core    Illegal Instruction
           SIGABRT       6       Core    Abort signal from abort(3)
           SIGFPE        8       Core    Floating point exception
           SIGKILL       9       Term    Kill signal
           SIGSEGV      11       Core    Invalid memory reference
           SIGPIPE      13       Term    Broken pipe: write to pipe with no
                                         readers
           SIGALRM      14       Term    Timer signal from alarm(2)
           SIGTERM      15       Term    Termination signal
           SIGUSR1   30,10,16    Term    User-defined signal 1
           SIGUSR2   31,12,17    Term    User-defined signal 2
           SIGCHLD   20,17,18    Ign     Child stopped or terminated
           SIGCONT   19,18,25    Cont    Continue if stopped
           SIGSTOP   17,19,23    Stop    Stop process
           SIGTSTP   18,20,24    Stop    Stop typed at terminal
           SIGTTIN   21,21,26    Stop    Terminal input for background process
           SIGTTOU   22,22,27    Stop    Terminal output for background process
    

    像这样:
    kill <signal> <pid>

    一旦你有了核心,你就可以在gdb中和符号文件一起打开。

        4
  •  0
  •   dev    7 年前

    你可以用 generate-core-file 在gdb中生成运行进程的核心转储的命令。