gpt4 book ai didi

linux - 如何调查进程在做什么?

转载 作者:IT王子 更新时间:2023-10-29 00:25:25 25 4
gpt4 key购买 nike

我知道这可以从/proc/PID 目录中检查,

但是不知道怎么办

谁能给我指路?

最佳答案

通常strace就是这个问题的答案。最简单的方法是直接使用strace运行命令,例如:

wichert@fog:~$ strace ls
execve("/bin/ls", ["ls"], [/* 16 vars */]) = 0
brk(0) = 0x9fa8000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f0a000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)

这不适用于已经运行的进程,例如 PHP。幸运的是,您还可以使用 -p 参数将 strace 附加到现有进程。例如:

wichert@fog:~$ strace -p 3761
Process 3761 attached - interrupt to quit
select(16, [5 7 8], NULL, [5 7 8], {0, 580000}) = 0 (Timeout)
alarm(0) = 62
rt_sigprocmask(SIG_BLOCK, [ALRM], [], 8) = 0
rt_sigaction(SIGALRM, {SIG_DFL}, {0x809a270, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0

对于生成其他进程的守护进程,您可能还需要使用 -f 参数。

除了总是有用的 strace,您可能还想看看 ltrace。 ltrace 类似于 strace,但它显示的是库调用而不是系统调用。一个例子:

[one;~]-6> ltrace ls
__libc_start_main(0x804e5f0, 1, 0xbfdb7254, 0x8059a10, 0x8059a00 <unfinished ...>
setlocale(6, "") = "LC_CTYPE=en_GB.UTF-8;LC_NUMERIC="...
bindtextdomain("coreutils", "/usr/share/locale") = "/usr/share/locale"
textdomain("coreutils") = "coreutils"
__cxa_atexit(0x8051860, 0, 0, 0xb7f65ff4, 0xbfdb71b8) = 0
isatty(1) = 1
getenv("QUOTING_STYLE") = NULL

请注意,您还会看到相当数量的内部 libc 调用,因此输出可能比您预期的更冗长。

关于linux - 如何调查进程在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/884525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com