Закройте процесс dd, который был запущен в сценарии тире, с -SIGINT - PullRequest
0 голосов
/ 28 октября 2019

Когда я запускаю процесс dd непосредственно из Терминала с командой

dd if=/dev/zero of=/dev/null &

и отправляю ему команду -SIGINT с командой

kill -SIGINT <pid>

, он успешно закрывается. Но когда я запускаю процесс из скрипта,

#!/bin/sh
dd if=/dev/zero of=/dev/null &

kill -SIGINT <pid> не влияет на процесс. Интересно, почему это так? В интернете я не нашел никакой информации.

1 Ответ

1 голос
/ 29 октября 2019

POSIX говорит :

Если управление заданиями отключено (см. Описание set -m), когда оболочка выполняет асинхронный список, команды в списке должны наследоватьсяиз оболочки сигнальное действие игнорируется (SIG_IGN) для сигналов SIGINT и SIGQUIT.

Это, вероятно, происходит потому, что Ctrl + C отправляет sigint каждому процессу в группе, поэтому без такого поведения любойПри попытке прервать основной сценарий фоновые процессы неожиданно прекратятся.

...