Contesto:
Gli utenti mi forniscono i loro script personalizzati per l'esecuzione. Questi script possono essere di qualsiasi tipo come gli script per avviare più programmi GUI, servizi di back-end. Non ho controllo su come sono scritti gli script. Questi script possono essere di tipo bloccante, ovvero l'esecuzione attende fino all'uscita di tutti i processi figlio (programmi eseguiti in sequenza)
#exaple of blocking script
echo "START"
first_program
second_program
echo "DONE"
o di tipo non bloccante, ad esempio quelli che fork il processo figlio in background ed escono qualcosa del genere
#example of non-blocking script
echo "START"
first_program &
second_program &
echo "DONE"
Cosa sto cercando di ottenere?
Gli script forniti dall'utente possono essere di uno qualsiasi dei due tipi sopra elencati o entrambi. Il mio compito è quello di eseguire lo script e attendere fino a quando tutti i processi avviati da esso terminano e quindi arrestano il nodo. Se è di tipo bloccante, case è semplicemente semplice, vale a dire ottenere il PID del processo di esecuzione dello script e attendere fino a ps -ef | grep -ef Il PID non ha più voci. Gli script non bloccanti sono quelli che mi danno problemi
Esiste un modo per ottenere l'elenco dei PID di tutto il processo figlio generato dall'esecuzione di uno script? Eventuali suggerimenti o suggerimenti saranno molto apprezzati
grep
, solo ps –udummy_user
. Inoltre, guarda i gruppi di processi.
ps
senza alcun argomento (dovrebbe essere solo bash
e ps
all'inizio). Inizia la tua sceneggiatura lì. Al termine, attendere fino a ps | wc -l
raggiungere il valore previsto.
pid$(foo.sh; echo $!)
che ti darà il PID infoo.sh
modo da poterlo usareps --ppid
. Funzionerà?