Como eu poderia escrever um script Bash que executa um programa de longa duração e armazena a identificação do processo do programa em um arquivo separado?
Eu quero algo como
#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file
No entanto, fazer exatamente isso executaria a ferramentaps
após a conclusão.
Existe uma maneira de obter o ID do processo criado?
long_running_tool
processo. Conseqüentemente, o executivo nunca retorna e a seguinte linha nunca é alcançada. Vejahelp exec
,execve(2)
.Respostas:
Você pode facilmente executar o processo em segundo plano com "&" e obter o PID do processo em segundo plano usando "$!"
Então, opcionalmente, aguarde $! se você deseja que o shell bloqueie até que o processo conclua a execução.
fonte
Como mencionado anteriormente,
exec
substituibash
pelo programa especificado, mantendo o PID.fonte