Когда вы запускаете задание на переднем плане в интерактивной оболочке, только процессы в этом задании (в соответствующей группе процессов )получают SIGINT (, отправленный ядром, а не оболочкой )после ^C
.
Если не запущено какое-либо приоритетное задание, то есть по запросу, когда оболочка ожидает ввода вами командной строки, оболочка находится на переднем плане¹. Таким образом, нажатие ^C
затем отправит сигнал SIGINT в оболочку, которая обычно будет интерпретироваться как отмена введенного в данный момент текста; он также может убить команду, вызванную как часть ключа или виджета завершения. Вы также можете добавить туда свой собственный обработчик.
¹ если оболочка была запущена как часть сценария, одновременно выполняющего некоторые другие команды, другие процессы могут находиться в той же группе процессов. Интерактивные оболочки попытаются создать для себя новую группу процессов (и сделать ее приоритетной )при запуске, но могут быть не в состоянии сделать это, если их процесс уже был лидером группы процессов.Если вы это сделаете:
bash -c ': <(sleep 1000); exec bash'
И нажмите Ctrl+C в приглашении этой оболочки bash
, вы заметите, что sleep
также будет уничтожен.
Вы бы этого не заметили при sleep
таком запуске:
sh -c 'sleep 1000 & exec bash'
как sh
в этом случае явно игнорирует SIGINT для асинхронной команды sleep
(устанавливает расположение SIGINT в SIGIGN перед выполнениемsleep
).
Следующее будет работать:
sgdisk --clear /dev/vda --set-alignment=1 --new 1:34:2047 --typecode 1:EF02 -c 1:"grub" -g /dev/vda
sgdisk --new 2:0:-2G --typecode 2:8300 -g /dev/vda
sgdisk --new 3:0:0 --typecode 3:8200 -g /dev/vda
Это намного проще, чем я думал. sgdisk
делает все расчеты. Ключом является знак минус, который объясняется на справочной странице (, которую я пропустил ранее ).
You can specify locations relative to the start or end of the specified default range by preceding the number by a '+' or '-' symbol, as in +2G to specify a point 2GiB after the default start sector, or -200M to specify a point 200MiB before the last available sector. A start or end value of 0 specifies the default value,