Unbuffer engole o status de saída do processo eliminado

1

O comando "unbuffer" esperado parece engolir o status de saída de seu filho se o processo for eliminado. Existe algo que pode ser feito para impedir esse comportamento? Ele não engole o status de saída se o processo filho sair com um status de saída diferente de zero em geral.

Para testemunhar esse comportamento, considere dois scripts bash:

a.sh:

    exit 1

vs

b.sh:
    kill -11 $$

faça unbuffer em cada um deles e imprima $ ?. No primeiro caso, vejo 1, mas no segundo caso vejo 0 quando espero 139

    
por frankc 15.04.2014 / 20:55

1 resposta

3

Sim, você precisa modificar o script "unbuffer" para alterar a maneira como "unbuffer" aguarda o término do processo filho.

De esperar documentação:

Additional elements may appear at the end of the return value from wait. An optional fifth element identifies a class of information. Currently, the only possible value for this element is CHILDKILLED in which case the next two values are the C-style signal name and a short textual description.

No script "unbuffer", procure por exit [lindex [wait] 3] e substitua-o pelo seguinte código:

set result [wait]
send_user "wait returned: $result\n"
if { [llength $result] == 4 } {
    exit [lindex $result 3]
} else {
    exit 1
}

Após essa modificação, você verá claramente a diferença. Por exemplo, executando seu script b.sh , você obterá algo assim:

wait returned: 8606 exp6 0 0 CHILDKILLED SIGSEGV {segmentation violation}

Você pode mudar o valor de exit 1 para qualquer valor que desejar. Você pode sair com 139 se desejar, mas o valor não será alterado para corresponder ao sinal, a menos que você adicione ainda mais código ao script "unbuffer".

    
por 31.08.2014 / 06:54