tag picard musicbrainz mac kid3 español editar easytag linux shell unix pstree

linux - picard - Caminando un árbol de proceso



musicbrainz picard español (3)

Su primer paso es conectar ps a través de awk y grep. Al usar awk, puede aislar el campo ''this process PID'' o el ''parent process PID''.

O bien, dé un paseo por el sistema de archivos / proc.

Tengo el siguiente escenario.

El usuario escribiría el PID de un proceso y el script debería mostrar el proceso y sus subprocesos, subprocesos (y demás) de PID, y debería enumerarlo en un formato de árbol.

Intenté usar pstree PID y ps faux PID , pero no funciona. Parece que no toma PID de procesos como argumentos.

Alguna idea, por favor?


Este es el script bash que usa solo ps y awk . Puede usar at como base para generar árbol de procesos.

ppid=$1 while true do forloop=FALSE # get all children by pid for i in `ps -ef | awk ''$3 == ''$ppid'' {print $2}''` do # Here you have one of of the elements of tree # parent -> child echo $ppid - $i forloop=TRUE done ppid=$i if [ "$forloop" = "FALSE" ]; then exit fi done


Solo quería documentar mis pasos relacionados con este problema.

Digamos que ejecuto esto en una terminal:

~$ echo "read -p ''Press Enter''" > mytest.sh ~$ chmod +x mytest.sh ~$ bash -c bash ~$ bash -c ./mytest.sh

... y dejarlo esperando en el mensaje de entrada de read . Entonces, siempre puedo encontrar el pid de mytest.sh como:

$ ps axf | grep mytest 20473 pts/2 S+ 0:00 | | /_ grep --color=tty mytest 20308 pts/5 S+ 0:00 | | /_ bash -c ./mytest.sh

... sin embargo, me gustaría generar un árbol ps axf limitado a algunos padres de mytest.sh ; mirando un ps axf completo, podemos ver una jerarquía:

$ ps axf 1489 ? Sl 1:39 /_ gnome-terminal --sm-client-id 106ab86 1511 ? S 0:00 | /_ gnome-pty-helper ... 20238 pts/5 Ss 0:00 | /_ bash 20274 pts/5 S 0:00 | | /_ bash 20308 pts/5 S+ 0:00 | | /_ bash -c ./mytest.sh ...

Entonces, digamos que no quiero ''escanear'' el gnome-terminal (1489) como padre, sino que quiero comenzar en bash (20238) .. Entonces, me gustaría obtener este resultado:

$ ps f -p 20238 20274 20308 PID TTY STAT TIME COMMAND 20238 pts/5 Ss 0:00 bash 20274 pts/5 S 0:00 /_ bash 20308 pts/5 S+ 0:00 /_ bash -c ./mytest.sh

... excepto que no quiero copiar / pegar los PID secundarios manualmente :)

Podría usar pstree :

$ pstree -a -p 20238 bash,20238 └─bash,20274 └─bash,20308 -c ./mytest.sh $ pstree -p 20238 bash(20238)───bash(20274)───bash(20308)

... desafortunadamente, la salida no es exactamente la misma que en ps axf , que prefiero.

Entonces, puedo usar pstree simplemente para obtener PIDs secundarios:

$ pstree -p 20238 | sed ''s/(//n(/g'' | grep ''('' | sed ''s/(/(.*/)).*//1/'' 20238 20274 20308 $ pstree -p 20238 | sed ''s/(//n(/g'' | grep ''('' | sed ''s/(/(.*/)).*//1/'' | tr "/n" , 20238,20274,20308,

y luego usarlos para obtener un árbol ps axf , basado solo en el PID del padre:

$ ps f -p $(pstree -p 20238 | sed ''s/(//n(/g'' | grep ''('' | sed ''s/(/(.*/)).*//1/'' | tr "/n" " ") PID TTY STAT TIME COMMAND 20238 pts/5 Ss 0:00 bash 20274 pts/5 S 0:00 /_ bash 20308 pts/5 S+ 0:00 /_ bash -c ./mytest.sh

Bueno, espero que esto ayude a alguien,
¡Aclamaciones!