Sé que esto se puede comprobar desde/proc/PID,cómo investigar qué está haciendo un proceso?
pero no saben cómo,
cualquiera puede mostrar el camino?
Sé que esto se puede comprobar desde/proc/PID,cómo investigar qué está haciendo un proceso?
pero no saben cómo,
cualquiera puede mostrar el camino?
Si está buscando monitorear las llamadas del sistema realizadas por un proceso, investigue usando strace.
Estoy buscando monitorear un programa de php. ¿Eso ayudará? – omg
Bueno, al menos le dirá qué llamadas al sistema está realizando el intérprete de PHP. Dependiendo de lo que esté haciendo el script PHP, puede ser útil o no. De lo contrario, es posible que desee examinar la depuración de PHP. –
Estoy monitoreando un robot xmpp – omg
Confío en el comando strace
. Pero solo dice qué llamadas al sistema está realizando el proceso. Sin embargo, podría ser suficiente ...
Es posible vincular un proceso en ejecución a strace
en tiempo de ejecución.
Obviamente, también se puede usar gdb
.
¿Puedes hacer una demostración sobre cómo usar strace para saber qué está haciendo un programa PHP? – omg
qué tipo de información estás buscando? Los pseudo-directorios en/proc/pid deberían ser bastante explicativos. Realmente depende de lo que estés buscando. Para el uso general de mem y cpu una herramienta como top probablemente sea mejor ya que actualiza las estadísticas para un intervalo configurado
Estoy monitoreando un robot xmpp, se desconecta fácilmente mientras el proceso aún está activo, estoy investigando el motivo. – omg
Por lo general, la respuesta a esta pregunta es strace. El método más simple es ejecutar un comando usando strace directamente, por ejemplo:
[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)
Esto no funciona para los procesos ya en ejecución, tales como PHP. Afortunadamente, también puede conectar strace a un proceso existente utilizando el parámetro -p. Por ejemplo:
[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
para los demonios que desovan otros procesos puede que tenga que utilizar el parámetro -f también.
Además de la herramienta siempre útil es posible que también desee consultar ltrace. ltrace es similar a strace, pero muestra llamadas de biblioteca en lugar de llamadas al sistema. Un ejemplo:
[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
Tenga en cuenta que también verá una buena cantidad de libc interno llama así, por lo que la producción podría ser más detallado de lo esperado.
También fue una gran ayuda para mí cuando aprendí sobre 'strace -f', que seguirá los subprocesos del que está rastreando. Finalmente, a menudo se puede obtener información adicional cuando se busca el contenido de '/ proc/
Esto pertenece a serverfault.com, creo (pidiendo supervisar un proceso a través del sistema de archivos). Además, necesitas decirnos qué especificamente deseas monitorear sobre un proceso que te ayude a mejorar –
Estoy buscando monitorear un programa de php – omg
Monitorear qué tal ... su consumo de memoria, su actividad de red, quién lo ha llamado, ...? –