web-dev-qa-db-ja.com

実行中のプロセスとそのシンボルテーブルのコアダンプを取得することは可能ですか?

実行中のプロセスとそのシンボルテーブルのコアダンプを作成するためにgdbを取得するか、他のツールを使用することは可能ですか?プロセスを終了せずにこれを行う方法があれば素晴らしいでしょう。

これが可能な場合、どのコマンドを使用しますか? (Linuxボックスでこれを実行しようとしています)

59
Readonly
 $ gdb --pid = 26426 
(gdb)gcore 
保存されたコアファイルcore.26426 
(gdb)detach 
67
DustinB

または、gcore $(pidof processname)を実行します。

これには、gdbを実行してCLIにコマンドを発行するよりも、できるだけ短時間で接続および切断できるという利点があります。

58
Alex Zeffertt

generate-core-fileコマンドをgdbで実行して、実行中のプロセスのコアダンプを生成します。

1
Dev

注:次の方法は、実行中のプロセスを終了し、記号も必要とします。

次のシグナルのいずれか(action = coreを使用)を実行中のプロセスに送信できます。
From: 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で開くことができます。

0
brokenfoot