Quando os comandos são combinados em segundo plano, como obter o identificador de processo do comando “base”?

0

Por exemplo:

printstuffslowly | ts -s &
ARECORD_PID=$!

ou:

arecord [options] > ~/recording.wav 2> >(ts -s > ~/errors.log) &
ARECORD_PID=$!

Dos meus testes na linha de comando, $ARECORD_PID acaba com o PID de ts . Mas o que eu acho que eu quero é o PID de printstuffslowly ou o PID de arecord , para que eu possa fazer mais alguns comandos até que ele saia:

while kill -0 "$ARECORD_PID" > /dev/null 2>&1
do
        sleep 1
        sync
done

Existe uma maneira de conseguir isso? Ou será que o PID de ts funciona realmente bem para o meu propósito?

    
por AaronD 19.01.2017 / 05:49

1 resposta

3

Ainda será o PID de arecord . Do manual do bash :

% bl0ck_qu0te%

O comando na substituição do processo precisa ser iniciado antes do comando em segundo plano:

% bl0ck_qu0te%

Para que o PID seja essencialmente perdido (você ainda pode pgrep , mas nenhum comando ou variável embutido irá obtê-lo).

    
por muru 19.01.2017 / 06:17