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