Я знаю, что это можно проверить в каталоге /proc/PID,
но не знаете, как это сделать,
Может ли кто-нибудь показать мне способ?
Я знаю, что это можно проверить в каталоге /proc/PID,
но не знаете, как это сделать,
Может ли кто-нибудь показать мне способ?
Обычно strace - это ответ на этот вопрос. Самый простой способ - запустить команду напрямую с помощью strace, например:
[email protected]:~$ 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. К счастью, вы также можете привязать strace к существующему процессу с помощью параметра -p. Например:
wiche[email protected]:~$ 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.
Помимо всегда полезной трассы, вы также можете посмотреть на 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, поэтому вывод может быть более подробным, чем вы ожидаете.
Если вы ищете мониторинг системных вызовов, выполняемых процессом, изучите использование strace.
Я полагаюсь на команду strace
. Но это только говорит, какие системные вызовы вызывает процесс. Этого может быть достаточно, хотя...
Во время выполнения можно связать выполняемый процесс с strace
.
Очевидно, что также можно использовать gdb
.
какую информацию вы ищете? Псевдо-каталоги под /proc/pid должны быть в значительной степени самоочевидными. Это действительно зависит от того, что вы ищете. Для общего использования mem и cpu инструмент, например top, вероятно, лучше, поскольку он обновляет статистику для настроенного интервала