как узнать, что делает процесс? - PullRequest
13 голосов
/ 19 мая 2009

Я знаю, что это можно проверить в каталоге / proc / PID,

но не знаю как,

Может кто-нибудь показать мне путь?

Ответы [ 5 ]

12 голосов
/ 20 ноября 2009

Обычно 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. К счастью, вы также можете присоединить strace к существующему процессу, используя параметр -p . Например:

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 .

Помимо всегда полезных полос, вы также можете посмотреть на 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, поэтому вывод может быть более подробным, чем вы ожидаете.

6 голосов
/ 19 мая 2009

Если вы ищете мониторинг системных вызовов, выполняемых процессом, изучите использование strace .

0 голосов
/ 26 марта 2019

Отличный инструмент для использования - ps и lsof. Вы можете использовать ps, чтобы найти PID или идентификатор процесса этого процесса, или использовать ps -u {process-username}, чтобы получить его PID. Затем используйте lsof, чтобы увидеть, какие файлы были открыты этим PID, например lsof -p pid.

Также вы можете использовать netstat, чтобы показать все соединения и соответствующие порты.

0 голосов
/ 19 мая 2009

какой тип информации вы ищете? Псевдо-каталоги в / proc / pid должны быть понятны. Это действительно зависит от того, что вы ищете. Для общего использования mem и cpu, вероятно, лучше использовать такой инструмент, как top, поскольку он обновляет статистику за заданный интервал

0 голосов
/ 19 мая 2009

Я полагаюсь на команду strace. Но это только говорит о том, что система называет процессом. Этого может быть достаточно, хотя ...

Возможно связать запущенный процесс с strace во время выполнения.

Очевидно, gdb также может быть использовано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...