Matar job em subshell com set -m

3

Eu tenho o seguinte script:

#!/bin/bash
set -m
(
    (bin/pnvd &> /dev/null; kill 0) &
    sleep 2
    perl integration-test/fuzz-test.pl || kill 0
    kill %1
)

Os primeiros três comandos na subshell são bem-sucedidos e retornam o status de saída 0. bin/pnvd nunca sai até ser eliminado externamente.

No entanto, depois de executar o quarto comando no subshell, o script sai com esta saída:

tools/integration-test: line 8:  4712 Terminated              ( ( bin/pnvd &> /dev/null; kill 0 ) & sleep 2; perl integration-test/fuzz-test.pl || kill 0; kill %1 )

e código de status 143.

Parece que kill %1 mata todo o grupo de processos, não apenas o primeiro, mas se eu remover set -m , ele sairá com o status 0.

Eu não estou muito interessado em como consertar isso, mas mais em: por que o subshell sai com status 143 quando mata o primeiro trabalho?

    
por rightfold 16.02.2017 / 12:38

1 resposta

1

Citação do link

Also, if the program dies because of a signal, bash lets you know by encoding the exit status as:

128 + signal-number

Hence SIGHUP yields 129, SIGILL yields 132, SIGTERM yields 143, etc.

Isso significa que seu processo tem SIGTERM.

Você tem três kill s no seu código. Se você puder excluir kill %1 , um dos outros dois kill 0 enviará o sinal TERM.

    
por 16.02.2017 / 12:52