No ambiente Linux, como posso enviar um sinal de interrupção para um processo, certificando-me de que o código de saída retornado desse processo seja 0? Eu teria que fazer alguma mágica extravagante do GDB para isso, ou há um sinal de matança extravagante que eu desconheço?
Caso de teste:
cat; echo $?
killall cat
Tentar vários sinais de interrupção oferece apenas sinais de retorno diferentes, como 129, 137 e 143. Meu objetivo é interromper um processo executado por um script, mas fazer com que o script pense que foi bem-sucedido.
No symbol table is loaded. Use the "file" command
. Embora isso seja altamente improvável._exit
sistema0
como argumento. Isso funcionará em qualquer processo que não seja simplesmente loop e queima de ciclos da CPU. Se o processo não ficar preso em um loop infinito, você ainda poderá usar a mesma abordagem se encontrar as instruções necessárias em algum lugar do executável e apontar o ponteiro para as instruções.Não. Quando o shell o captura,
SIGCHLD
ele define incondicionalmente o valor de retorno adequadamente como um valor diferente de zero, portanto, isso exigiria modificações no script ou no shell.fonte
Não tenho certeza, mas isso sairá com 0 se algum dos sinais listados for recebido. Você pode executar outras ações, incluindo chamar uma função, etc.
fonte
Este one-liner trabalhou para mim:
fonte
$ cat; echo $?
Terminated
143
.Um pouco hacky, mas ..
Você pode criar um wrapper para o seu processo, substituindo o SIGCHLD Handler. Por exemplo:
Depois disso, você pode fazer seu script executando esse wrapper em vez de seu processo, colocando-o anteriormente em $ PATH e renomeando para o mesmo nome.
fonte