Не могли бы вы объяснить, почему Ctrl + С в моем bash
shell влияет на команду, которая была ранее запущена в фоновом режиме с помощью
`./my_script.sh 1` &
Команда немедленно заканчивает выполнение 130
код:
[1]+ Exit 130 `./my_script.sh 1` &
Обычное поведение Ctrl + С это убить процесс переднего плана. И что здесь происходит?
Редактировать 1: (мои мысли) может быть, что-то связано с обратными галочками - здесь начинается процесс дочерней оболочки, и он как-то получает Ctrl + С когда родительский процесс получит его
Редактировать 2: я обнаружил, что Ctrl + С останавливает все фоновые процессы, запущенные из текущей оболочки с использованием обратных галочек.
./my_script.sh 1
& Амп; , Или вы спрашиваете о последней команде перед Ctrl-C?`./my_script.sh 1` &
Ответы:
Когда вы пишете команду
ты делаешь подстановка команд (увидеть ниже).
Практически вы выполняете подоболочка (тот, который для спины
``
) в фоновом режиме (&
) в котором запускается ваш скрипт (./my_script.sh 1
).настоящая оболочка ожидает окончания выполнения его подоболочки, чтобы запустить ее вывод в виде команд.
подоболочка ждет конца вашего сценария.
когда вы нажимаете Ctrl + С вы прерываете это ожидание, передавая сигнал
SIGINT
ребенку.В этот момент текущая оболочка пытается запустить в качестве команды вывод, полученный до сих пор ... и выдает ошибку
130
это означает «Сценарий прекращен с помощью Control-C» [ 2 ] ,С клюшки
``
, а также с$()
в Bash вы делаете подстановка команд [ 1 ] :например
Обратите внимание, что если вы запускаете в фоновом режиме больше таких команд
это всегда текущая оболочка, которая ожидает всех выходных данных дочерних элементов. Один Ctrl + С закончится это ожидание всех вместе.
Если вместо этого вы будете ждать конца скрипта, текущая оболочка попытается выполнить свой вывод, как только он завершит работу.
источник
SIGINT
ребенку "поведение по умолчаниюbash
? Или только при использовании подстановки команд?sleep 10; echo ok
как скрипт ...&
... ctrl c ... приятно провести время!