Это происходит из-за того, что Windows регистрирует загрузчик Windows как загрузчик по умолчанию, поэтому вы не встречаете GRUB.
Чтобы решить эту проблему,
Прежде всего создайте live CD с linux. В настоящее время,выключите компьютер и загрузите его с live CD. И попробуйте восстановить загрузку, следуя инструкциям здесь .
Если это не поможет, загрузитесь в Windows.
Если ваша система Linux 64-битная.
bcdedit /set {bootmgr} path \EFI\debian\grubx64.efi
, если ваша система Linux 32-битная.
bcdedit /set {bootmgr} path \EFI\debian\grubia32.efi
Эта команда сделает загрузчик GRUB загрузчиком по умолчанию для вашей системы.
Вы смешиваете много вещей, стандартный ввод, вывод, файловые дескрипторы ошибок (fds )— это не то же самое, что терминал fd.
Когда вы открываете терминал и вводите команду, по умолчанию эти 3 fds (stdin (0 ),stdout (1 ),stderr (2 ))«точка» на терминал, но это можно изменить, перенаправив любой из этих fds (, например, «ls non _существующий _файл 2>err» перенаправит сообщения об ошибках в файл «err», и вы не будете см. его на терминале ).
Теперь я хотел бы обратиться к вашей строке «open /dev/tty»,который на самом деле указывает на ваш ТЕРМИНАЛ, чтобы продемонстрировать разницу, проверьте этот образец программы.Проще говоря, как работает трубопровод:
Когда вы передаете две команды (без символов «<» или «>» ), первая команда будет вводить данные с клавиатуры (, если она требует чтения ввода ), и перенаправляет свой вывод быть принятым в качестве входных данных второй командой, это означает, что «стандартный» ввод вашего процесса «b» больше не является терминалом, а является выходом процесса «a».
Теперь, чтобы окончательно ответить на ваш вопрос, вам нужно знать еще 2 вещи:
1 )Когда вы запускаете процесс на передний план, оболочка передаст этому процессу управление терминалом и будет ждать завершения процесса, чтобы вернуть себе управление терминалом и любыми клавиатурными -генерируемыми сигналами будут отправлены этому контролирующему процессу во время его выполнения.
2 )При запуске конвейерной команды (cmd1 | cmd2 ), оболочка сначала поместит эти 2 процесса в одну «группу процессов» (. Если вы хотите узнать больше, прочтите об управлении заданиями ). Итак, что происходит с вашим «a | b», так это то, что эти 2 процесса находятся в одной группе процессов, поэтому любые сигналы, сгенерированные клавиатурой -, будут отправлены ОБОИМ этим процессам. потому что сигналы, сгенерированные клавиатурой -, отправляются всей группе процессов, а НЕ отдельному процессу. Надеюсь, это ответ на ваш вопрос, не стесняйтесь задавать вопрос, если что-то непонятно
Необходимо уточнить, что сигналы типа Ctrl -C НЕ передаются через стандартный ввод. Когда вы набираете Ctrl -C на своем терминале, «Ctrl» и «C» не передаются вашему процессу напрямую как 2 необработанных символа, драйвер tty интерпретирует их как сигнал SIGINT и отправляет сигнал вашей группе процессов переднего плана.
Если вы нажмете Ctrl -C во время работы a | b
, ОБА из двух процессов получат сигнал SIGINT. Чтобы проверить это, вы можете нажать Ctrl -C во время выполнения этой команды :
tail -f /var/log/syslog | grep some_pattern
, и вы сразу же увидите приглашение оболочки, что означает, что оба процесса прерваны.
И как это?
После того, как вы вошли -в оболочку, вы находитесь в сеансе , все программы, запущенные в оболочке, принадлежат этому сеансу.
Сеанс может иметь управляющий терминал , он обычно принимает ввод с клавиатуры и выводит на экран. Процессы в этом сеансе читают stdin с управляющего терминала, записывают stdout и stderr на управляющий терминал и получают сигналы от управляющего терминала.
Процессы, связанные с shell pipe, образуют группу процессов. например.:
proc1 | proc2 &
или подобное
proc3 | proc2 | proc5
Сеанс может иметь одну группу приоритетных процессов и одну или несколько групп фоновых процессов . Группа процессов, блокирующая вашу оболочку и занимающая ваш экран переднего плана, является группой процессов переднего плана. В то время как группа процессов, управляемая &
, будет группой фоновых процессов.
Всякий раз, когда вы вводите последовательности, подобные «Ctrl -C» в управляющем терминале, сигнал будет отправлен всем процессам в группе процессов переднего плана.