Trucos UNIX: Buscando procesos

Problema #1:
Quiere ver la linea de comandos completa de un programa.
Si, Linux tiene un un montón de herramientas para manejar procesos. La más común es ps y normalmente la utilizamos así:
Como pueden ver aquí, la linea de comandos no sale completa. ¿Como la mostramos?. En linux nos aprovechamos de el hecho de que el sistema /proc se puede leer como cualquier archivo. En este caso buscamos el proceso 2913:
[josevnz@localhost ~]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:22 ? 00:00:01 init [5]
root 2 1 0 10:22 ? 00:00:00 [ksoftirqd/0]
root 3 1 0 10:22 ? 00:00:00 [watchdog/0]
root 4 1 0 10:22 ? 00:00:24 [events/0]
josevnz 2913 2865 0 10:23 ? 00:00:00 /usr/bin/ssh-agent /usr/bin/dbus-launch
--exit-with-session /etc/X11/xinit/Xcl
[josevnz@localhost ~]$ cat /proc/2913/cmdline
/usr/bin/ssh-agent/usr/bin/dbus-launch--exit-with-session/etc/X11/xinit/Xclients
[josevnz@localhost ~]$
En Solaris puede utilizar /usr/ucb/ps -auxwww
Finalmente con Top puede mostrar la linea de comandos completa presionando la tecla 'c' (command line):
top - 18:27:51 up 8:05, 2 users, load average: 0.37, 0.28, 0.20
Tasks: 92 total, 1 running, 91 sleeping, 0 stopped, 0 zombie
Cpu(s): 12.8% us, 3.3% sy, 0.0% ni, 83.6% id, 0.0% wa, 0.3% hi, 0.0% si
Mem: 507068k total, 389428k used, 117640k free, 19432k buffers
Swap: 1015800k total, 64k used, 1015736k free, 173960k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7689 josevnz 15 0 38380 12m 8476 S 9.2 2.6 0:07.89 /usr/bin/gnome-terminal
2791 root 15 0 161m 28m 6096 S 6.2 5.8 3:59.21 /usr/X11R6/bin/X :0 -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt7
7856 josevnz 16 0 2020 980 784 R 0.7 0.2 0:00.04 top
4 root 10 -5 0 0 0 S 0.3 0.0 0:24.69 [events/0]
1 root 16 0 1744 568 492 S 0.0 0.1 0:01.63 init [5]
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 [ksoftirqd/0]
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 [watchdog/0]
Problema #2:
Quiere ver el padre e hijos de un programa.
Esto es útil por ejemplo si quieremos matar a un proceso y a todos los procesos asociados (como por ejemplo un programa en Bash que llama a otros programas escritos en Java). La forma lenta de hacerlo es:
ps -ef|grep programa (el nombre de el programa que quiero eliminar)
ps -ef|grep PID programa (me da el hijo inmediato)
ps -ef|grep PID programa (me da el hijo inmediato y así sucesivamente...)
Sin embargo en Linux podemos obtener todo esto en dos pasos:
[josevnz@localhost ~]$ ps -ef |grep firefox
josevnz 5402 1 0 13:55 ? 00:00:00 /bin/sh /usr/lib/firefox-1.0.4/firefox
-UILocale en-US
josevnz 5430 5402 0 13:55 ? 00:00:00 /bin/sh /usr/lib/firefox-1.0.4/run-mozilla.sh
/usr/lib/firefox-1.0.4/firefox-bin -UILocale en-US
josevnz 5435 5430 1 13:55 ? 00:03:49 /usr/lib/firefox-1.0.4/firefox-bin
-UILocale en-US
josevnz 7925 7691 0 18:33 pts/1 00:00:00 grep firefox
[josevnz@localhost ~]$ pstree -p 5402
firefox(5402)───run-mozilla.sh(5430)───firefox-bin(5435)
[josevnz@localhost ~]$
En Solaris el comando es ptree -p.
¿Que trucos se sabe usted? :D
Buscar en Technorati: venezuela, linux, Open Source



2 Comentarios:
Yo uso mucho
ps faux (muestra arbol y linea de comandos completa)
Y cuando no me interesa el padre
ps aux
Para ver la linea completa también puedes poner "ps -fe --cols=2000"
Publicar un comentario en la entrada
<< Regresar