副标题#e#
要转储一个进程的内存,你需要向 ProcDump 提供它的进程 ID(PID)。你可以使用机器上任何正在运行的程序或守护进程。在这个例子中,我将使用一个永远循环的小 C 程序。编译程序并运行它(要退出程序,按 Ctrl+C,如果程序在后台运行,则使用 kill 命令并输入 PID):
$ cat progxyz.c
#include<stdio.h>
int main(){
for(;;)
{
printf(".");
sleep(1);
}
return0;
}
$
$ gcc progxyz.c -o progxyz
$
$ ./progxyz &
[1]350498
$
运行该程序,你可以使用 pgrep 或 ps 找到它的 PID。记下 PID:
$ pgrep progxyz
350498
$
$ ps-ef |grep progxyz
root 350498 345445 003:29 pts/1 00:00:00./progxyz
root 350508 347350 003:29 pts/0 00:00:00grep–color=auto progxyz
$
当测试进程正在运行时,调用 procdump 并提供 PID。下面的输出表明了该进程的名称和 PID,并报告它生成了一个核心转储文件,并显示其文件名:
$ procdump -p 350498
ProcDump v1.1.1-Sysinternals process dump utility
Copyright(C)2020MicrosoftCorporation.All rights reserved.Licensed under the MIT license.
MarkRussinovich,MarioHewardt,JohnSalem,JavidHabibi
Monitors a process and writes a dumpfilewhen the process exceeds the
specified criteria.
Process: progxyz (350498)
CPU Threshold: n/a
CommitThreshold: n/a
Polling interval (ms): 1000
Threshold(s): 10
Number of Dumps: 1
PressCtrl-C to end monitoring without terminating the process.
[03:30:00- INFO]:Timed:
[03:30:01- INFO]:Coredump0 generated: progxyz_time_2020-06-24_03:30:00.350498
$
列出当前目录的内容,你应该可以看到新的核心文件。文件名与 procdump 命令显示的文件名一致,日期、时间、PID 都会附加在文件名上:
#p#副标题#e#
$ ls-l progxyz_time_2020-06-24_03\:30\:00.350498
-rw-r–r–.1 root root 356848Jun2403:30 progxyz_time_2020-06-24_03:30:00.350498
$
$ file progxyz_time_2020-06-24_03\:30\:00.350498
progxyz_time_2020-06-24_03:30:00.350498: ELF 64-bit LSB core file, x86-64, version 1(SYSV), SVR4-style,from'./progxyz', real uid:0, effective uid:0, real gid:0, effective gid:0, execfn:'./progxyz', platform:'x86_64'