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.
ps
sem argumentos (deve ser apenas bash
e ps
no início). Inicie seu script lá. Depois de concluído, aguarde até ps | wc -l
atingir o valor esperado.
pid$(foo.sh; echo $!)
que fornecerá o PIDfoo.sh
para que você possa usá-lops --ppid
. Isso vai funcionar?