En el entorno Linux, ¿cómo puedo enviar una señal de cierre a un proceso, mientras me aseguro de que el código de salida devuelto por ese proceso sea 0? ¿Tendría que hacer un poco de magia GDB elegante para esto, o hay una señal de muerte elegante que desconozco?
Caso de prueba:
cat; echo $?
killall cat
Probar varias señales de muerte solo ofrece diferentes señales de retorno, como 129, 137 y 143. Mi objetivo es matar un proceso que ejecuta un script, pero hacer que el script piense que fue exitoso.
No symbol table is loaded. Use the "file" command
. Aunque esto es muy poco probable._exit
sistema con un0
argumento. Eso funcionará en cualquier proceso que no sea simplemente bucle y grabación de ciclos de CPU. Si el proceso no se atasca en un bucle infinito, aún puede usar el mismo enfoque si puede encontrar las instrucciones necesarias en algún lugar de su ejecutable y apuntar el puntero de instrucciones allí.No. Cuando el shell lo atrapa
SIGCHLD
, incondicionalmente establece el valor de retorno de manera apropiada en un valor distinto de cero, por lo que esto requeriría la modificación del script o del shell.fuente
No estoy seguro, pero esto saldrá con un 0 si se recibe alguna de las señales enumeradas. Puede realizar otras acciones, como llamar a una función, etc.
fuente
Esta frase me funcionó:
fuente
$ cat; echo $?
Terminated
143
.Un poco hacky, pero ...
Puede crear un contenedor para su proceso, anulando el controlador SIGCHLD. Por ejemplo:
Después de eso, puede hacer que su script ejecute este contenedor en lugar de su proceso al colocarlo anteriormente en $ PATH y cambiarle el nombre al mismo nombre.
fuente