Conceda a timeout
a chance de iniciar o script e, em seguida, peça ps
para o processo cujo pai é timeout
:
timeout -s SIGINT 500s ./my_script &
bgpid=$!
sleep 1
p=$(ps -o pid= --ppid "$bgpid")
echo The pid you want is: "$p"
Estou usando o utilitário timeout
dentro de um script bash para executar um comando por um determinado período (por exemplo, timeout -s SIGINT 500s ./my_script
).
Quero monitorar o processo myscript
para ver quanto CPU / memória ele usa (por exemplo, com o comando htop -p <pid>
).
Eu sei que quando um processo é iniciado em segundo plano (com &
) eu posso obter seu pid programaticamente, recuperando a variável $!
. O problema é que o tempo limite gera um novo subprocesso e com a variável $!
eu recebo o "pid de timeout" e não o pid do myscript.
Como você pode recuperar o pid do subprocesso gerado pelo tempo limite?
Tags timeout shell-script