como investigar o que um processo está fazendo?

votos
11

Eu sei que isto pode ser verificado a partir de / proc diretório / PID,

mas não sei como,

qualquer um pode me mostrar o caminho?

Publicado 19/05/2009 em 20:14
fonte usuário
Em outras línguas...                            


5 respostas

votos
9

Normalmente strace é a resposta para esta pergunta. O método mais simples é executar um comando usando strace directamente, por exemplo:

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)

Isso não funciona para já em execução processos, tais como PHP. Felizmente, você também pode anexar strace a um processo existente usando o -p parâmetro. Por exemplo:

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

Para daemons que geram outros processos pode ser necessário usar o -f parâmetro também.

Além do strace sempre útil você também pode querer olhar para ltrace . ltrace é semelhante ao strace, mas mostra chamadas de biblioteca em vez de chamadas de sistema. Um exemplo:

[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

Por favor note que você também vai ver uma boa quantidade de libc interna chama, bem como, para que a saída poderia ser mais detalhado do que o esperado.

Respondeu 20/11/2009 em 09:55
fonte usuário

votos
5

Se você estiver olhando para o monitoramento do sistema chamadas feitas por um processo, olhar em usar strace .

Respondeu 19/05/2009 em 20:16
fonte usuário

votos
0

Uma ótima ferramenta para usar é ps e lsof. Você pode usar ps para encontrar o PID ou ID do processo desse processo ou uso ps -u {processo de username} para obtê-lo é PID. Em seguida, use lsof para ver quais arquivos foram abertos por aquele PID como assim lsof -p pid.

Também você pode usar netstat para mostrar todas as conexões e portas correspondentes.

Respondeu 26/03/2019 em 09:00
fonte usuário

votos
0

que tipo de informação que você está procurando? Os pseudo-diretórios sob / proc / pid deve ser bastante auto-explicativo. Realmente depende do que você está procurando. Para mem geral e uso de CPU uma ferramenta como o topo é provavelmente melhor desde que atualiza as estatísticas de um intervalo configurado

Respondeu 19/05/2009 em 20:25
fonte usuário

votos
0

I contar com o stracecomando. Mas ele só diz que sistema chama o processo está a fazer. Poderia ser suficiente embora ...

É possível ligar um processo para execução straceem tempo de execução.

Obviamente, gdbtambém pode ser usado.

Respondeu 19/05/2009 em 20:17
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more