Contexto:
Os usuários me fornecem seus scripts personalizados para execução. Esses scripts podem ser de qualquer tipo, como scripts para iniciar vários programas GUI, serviços de back-end. Não tenho controle sobre como os scripts são escritos. Esses scripts podem ser do tipo de bloqueio, ou seja, a execução aguarda até que todos os processos filhos (programas executados sequencialmente) saiam
#exaple of blocking script
echo "START"
first_program
second_program
echo "DONE"
ou não bloqueador, ou seja, aqueles que bifurcam o processo filho em segundo plano e saem algo como
#example of non-blocking script
echo "START"
first_program &
second_program &
echo "DONE"
O que estou tentando alcançar?
Os scripts fornecidos pelo usuário podem ser de qualquer um dos dois tipos acima ou misturar os dois. Meu trabalho é executar o script e aguardar até que todos os processos iniciados por ele saiam e, em seguida, encerre o nó. Se for do tipo de bloqueio, case é muito simples, ou seja, obtenha o PID do processo de execução do script e aguarde até que o ps -ef | grep -ef PID não tenha mais entradas. Scripts sem bloqueio são os que me dão problemas
Existe uma maneira de obter uma lista de PIDs de todo o processo filho gerado pela execução de um script? Quaisquer sugestões ou sugestões serão muito apreciadas
grep, apenas ps –udummy_user. Além disso, observe os grupos de processos.
pssem argumentos (deve ser apenas bashe psno início). Inicie seu script lá. Depois de concluído, aguarde até ps | wc -latingir o valor esperado.
pid$(foo.sh; echo $!)que fornecerá o PIDfoo.shpara que você possa usá-lops --ppid. Isso vai funcionar?