Interromper o script com SIGINT [duplicado]

0

Olá, eu tenho um script bash que é um liner para executar uma parte do código C ++ de execução longa. Executando ps -xaf o script está sendo executado e o código C ++ é seu filho

script.sh
\_ long_main.cpp

Quando executo o código a partir da linha de comando e pressiono ctrl + C, o script bash e o código c ++ são interrompidos e param a execução. Eu amo isso.

No entanto, quando executo um script e executo o kill -SIGINT PID no meu script, o script morre e o código C ++ é executado. Quando eu executo ps -xaf , vejo que o script sh está realmente morto, mas o código C ++ está sendo executado por si próprio e agora é um processo de nível superior da seguinte forma:

long_main.cpp

Poderia, por favor, explicar qual é a diferença entre CRTL + C e matar -SIGINT neste caso.

    
por Ivan Kvolik 28.02.2018 / 15:39

1 resposta

0

Se o script de shell em questão contiver apenas um único comando que invoca um programa externo, você pode prefixar o comando com exec para substituir o processo do shell, em vez de gerar um novo processo. Por exemplo. mudar

/path/to/my-program "$@"

para

exec /path/to/my-program "$@"

Como my-program agora substitui o processo de shell, ele retém seu PID e recebe todos os sinais enviados a ele por PID incl. SIGINT. Obviamente, você não pode enviar um sinal para ele baseado no nome ou na linha de comando do shell script por mais tempo.

    
por David Foerster 02.03.2018 / 14:15