Eu escrevi um script de shell para iniciar vários trabalhos em segundo plano e armazenar os IDs de processo deles em uma matriz usando $!
. No final, imprimo todos os IDs de processo iterando pela matriz. Quero saber se o script de shell escrito tem um bug? E a razão pela qual sinto que há um bug no meu script de shell é porque $!
pode retornar o ID de processo de outro processo se houver vários processos sendo criados no meu PC.
#!/bin/bash
ps -a & pids+=($!) #Does $! return process id of command ps -a for sure
ls -la & pids+=($!) #Does $! return process id of command ls -la for sure
echo ${pids[0]}
echo ${pids[1]}
$!
"expande para o ID do processo do comando em segundo plano (assíncrono) executado mais recentemente" (fonte: manual do bash)A variável é local para a instância atual do shell, portanto, qualquer coisa que aconteça fora do script/sessão de shell atual não é relevante.
Se você colocar dois processos em segundo plano:
Então
$!
conterá o PID do último processo em segundo plano (neste caso,ls -la
).