¿Cómo se puede encontrar el número de procesos hijo de un script bash, desde el propio script?Encontrar el número de procesos secundarios
Respuesta
Para obtener el PID del script bash puede usar la variable $$
.
Entonces, para obtener sus hijos, puede ejecutar:
bash_pid=$$
children=`ps -eo ppid | grep -w $bash_pid`
ps
devolverá la lista de los PID de los padres. Luego, grep
filtra todos los procesos no relacionados con los hijos del script bash. Con el fin de obtener el número de niños que puede hacer:
num_children=`echo $children | wc -w`
En realidad el número que obtendrá será apagado por 1, ya que ps
habrá un niño de la escritura del golpe también. Si no desea contar la ejecución de ps
como un niño, a continuación, puedes arreglar eso con:
let num_children=num_children-1
ACTUALIZACIÓN: Con el fin de evitar llamar grep
, la siguiente sintaxis podría utilizarse (si es compatible por la versión instalada de ps
):
num_children=`ps --no-headers -o pid --ppid=$$ | wc -w`
'grep -w $ bash_pid' en caso de que bash pid sea una subcadena del ID del proceso del niño. – chepner
@chepner ¡Buen punto! Voy a arreglar eso. ¡Gracias! :) – betabandido
No estoy seguro, pero creo que el proceso adicional es la subshell que contiene la tubería ps/grep.Simplemente siendo pedantes :) – chepner
uso ps
con la opción para seleccionar --ppid
hijos del proceso de golpe de corriente.
bash_pid=$$
child_count=$(ps -o pid= --ppid $bash_id | wc -l)
let child_count-=1 # If you don't want to count the subshell that computed the answer
(Nota: esto requiere la versión Linux de ps
para --ppid
No sé si hay un equivalente para BSD ps
o no..)
Es posible evaluar los trabajos cáscara orden interna como :
counter = `jobs | wc -l`
Eso cuenta trabajos, no procesos. Un trabajo puede consistir en múltiples procesos. – chepner
No hay espacios alrededor del signo igual. Use '$()' en lugar de backticks. –
también puede utilizar pgrep:
child_count=$(($(pgrep --parent $$ | wc -l) - 1))
Use pgrep --parent $$
para obtener una lista de los elementos secundarios del proceso bash.
A continuación, utilice wc -l
en la salida para obtener el número de líneas: $(pgrep --parent $$ | wc -l)
Luego restar 1 (wc -l
informes 1 incluso cuando pgrep --parent $$
está vacía)
Prefiero:
num_children=$(pgrep -c -P$$)
Desova sólo una proceso, no tiene que contar palabras o ajustar los números de PID por los programas en la tubería.
Ejemplo:
~ $ echo $(pgrep -c -P$$)
0
~ $ sleep 20 &
[1] 26114
~ $ echo $(pgrep -c -P$$)
1
- 1. ¿Cómo encontrar todos los procesos secundarios?
- 2. fork() procesos secundarios y secundarios
- 3. cómo matar procesos y procesos secundarios de python?
- 4. fork() y wait() con dos procesos secundarios
- 5. Adjuntar automáticamente depurador vs2005 a procesos secundarios
- 6. Tener Supervisord Reiniciar periódicamente procesos secundarios
- 7. apio. Disminuir el número de procesos
- 8. Ejecutando un número limitado de procesos secundarios en paralelo en bash?
- 9. cómo encontrar nodos secundarios en el nodo raíz [TreeView]
- 10. desove ya la espera de los procesos secundarios en Python
- 11. Cómo esperar la salida de procesos no secundarios
- 12. Número máximo de procesos en Linux
- 13. Java ProcessBuilder process.destroy() no mata procesos secundarios en winXP
- 14. Python en Windows: ¿cómo esperar varios procesos secundarios?
- 15. ¿Cómo desactivo los bloques END en procesos secundarios?
- 16. Esperando en PowerShell para que finalicen todos los procesos secundarios
- 17. Popen.communicate() lanza OSError: "[Errno 10] No hay procesos secundarios"
- 18. ¿Cómo usar Fork() para crear solo 2 procesos secundarios?
- 19. ¿Cómo se enumeran todos los procesos secundarios en python?
- 20. Encontrar el número de inversiones de permutación
- 21. Encontrar el número de versión de Eclipse
- 22. Encontrar el número de núcleos en Java
- 23. Encontrar procesos que utilizan ALSA sonido rápido
- 24. Los procesos secundarios creados con el módulo de multiprocesamiento de python no se imprimirán
- 25. Hacer que el comando "Esperar" de Linux espere a TODOS los procesos secundarios
- 26. Esperando todos los procesos secundarios antes de que el padre reanude la ejecución UNIX
- 27. C++ Encontrar el mayor número en serie
- 28. Procesos Zombie que aparecen cuando genero procesos
- 29. ¿Es posible tener tubería entre dos procesos secundarios creados por el mismo elemento primario (LINUX, POSIX)
- 30. MPI Spawn: el proceso raíz no se comunica con procesos secundarios
hm. ¿recursivamente? –