Прервать скрипт bash с помощью SIGINT [duplicate]

Этот вопрос уже имеет ответ здесь: Убейте дерево процессов с помощью терминала? 4 ответа

Здравствуйте, у меня есть скрипт bash, который является одним лайнером для выполнения части длинного кода на C ++. Запуск ps -xaf сценарий запущен, а код C ++ - его дочерний

script.sh \_ long_main.cpp

Когда я запускаю код из командной строки и нажимаю ctrl + C, скрипт bash и код c ++ прерываются и останавливают выполнение. Мне нравится это.

Однако, когда я запускаю скрипт и выполняю kill -SIGINT PID на моем скрипте, скрипт умирает, а код C ++ работает. Когда я запускаю ps -xaf, я вижу, что сценарий sh действительно мертв, но C ++-код работает сам по себе, и теперь он является процессом верхнего уровня:

long_main.cpp

Не могли бы вы рассказать о в чем разница между CRTL + C и kill -SIGINT в этом случае.

0
задан 28 February 2018 в 18:39

2 ответа

Если рассматриваемый сценарий оболочки содержит только одну команду, которая вызывает внешнюю программу, вы можете добавить команду с помощью exec, чтобы заменить процесс оболочки, а не порождать новый процесс. E. g. измените

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

на

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

Поскольку теперь my-program заменяет процесс оболочки, он сохраняет свой PID и принимает все отправленные на него сигналы replace включительно SIGINT. Очевидно, вы больше не можете посылать ему сигнал на основе имени или командной строки сценария оболочки.

0
ответ дан 17 July 2018 в 19:48

Если рассматриваемый сценарий оболочки содержит только одну команду, которая вызывает внешнюю программу, вы можете добавить команду с помощью exec, чтобы заменить процесс оболочки, а не порождать новый процесс. E. g. измените

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

на

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

Поскольку теперь my-program заменяет процесс оболочки, он сохраняет свой PID и принимает все отправленные на него сигналы replace включительно SIGINT. Очевидно, вы больше не можете посылать ему сигнал на основе имени или командной строки сценария оболочки.

0
ответ дан 23 July 2018 в 20:33

Другие вопросы по тегам:

Похожие вопросы: