Como obter o pid do último comando executado no shell script?

213

Eu quero ter um script de shell como este:

my-app &
echo $my-app-pid

Mas eu não sei como obter o pid do comando recém executado.

Eu sei que posso usar apenas o comando jobs -p my-app para grep o pid. Mas se eu quiser executar o shell várias vezes, esse método não funcionará. Porque o jobspec é ambíguo.

    
por davidshen84 30.01.2012 / 12:34

5 respostas

295

O PID do último comando executado está no % variável de shell$! :

my-app &
echo $!
    
por 30.01.2012 / 12:42
55

Obter PID :

#!/bin/bash
my-app &
echo $!

Salvar PID na variável:

#!/bin/bash
my-app &
export APP_PID=$!

Salvar todas as instâncias PID no arquivo de texto:

#!/bin/bash
my-app &
echo $! >>/tmp/my-app.pid

Salvar saída, erros e PID em arquivos separados:

#!/bin/bash
my-app >/tmp/my-app.log 2>/tmp/my-app.error.log &
echo $! >>/tmp/my-app.pid

echo "my-app PID's: $(cat /tmp/my-app.pid)"
    
por 22.01.2016 / 16:04
3

Tente algo como

pidof my_app >> /tmp/my_app.pid
    
por 09.02.2016 / 17:24
0

Você também pode usar pkill para isso Com o pkill você pode simplesmente especificar o nome do processo e evitar pegar o pid

link

    
por 05.12.2018 / 20:33
-4

Tente algo assim:

 ps ef | grep "[m]y-app" | awk '{print $2}'

Colocar a primeira letra do seu processo entre [ ] garante que você não obtenha o processo grep em sua lista. Se necessário, você também pode adicionar um grep em seu nome de usuário.

    
por 30.01.2012 / 12:42