O PID de um processo filho bash (imapsync) - como você o obtém?

15

Alguém pode me dizer como obter o PID de um comando executado no bash.

Por exemplo Eu tenho um script bash que roda o imapsync.

Quando o script é eliminado, o processo do imapsync nem sempre é eliminado, portanto, gostaria de poder identificar o PID do imapsync programaticamente a partir do meu script, para que eu possa matar o processo do imapsync em um manipulador de sinal.

Então, como faço para obter o PID de um processo filho através de programação script pai?

    
por Jason Tan 14.01.2011 / 13:13

4 respostas

4

O imapsync tem uma opção para definir onde o seu pid é escrito:

- pidfile: o arquivo onde o pid do imapsync está escrito.

    
por 15.01.2011 / 01:59
46
any_command args &
my_child_PID=$!

IOW, assim como $$ mantém seu PID, $! tem o PID do comando de plano de fundo executado mais recentemente .

    
por 14.01.2011 / 13:17
10

Ao contrário de pidof , pgrep pode receber várias opções para restringir a quais processos ele retorna PIDs. Um que pode ser particularmente útil é selecionar com base no PPID usando o PID do processo atual.

pgrep -P $$ imapsync

que só produzirá PIDs do imapsync se eles forem filhos do seu script.

    
por 14.01.2011 / 14:46
0

Que tal colocar o imapsync em segundo plano momentaneamente, obtendo o PID e, em seguida, colocando em primeiro plano ... Algo parecido com isto:

imapsync &
pid=$!
wait $pid
retVal=$?
    
por 07.06.2013 / 03:47