2016-01-20 3 views
0

Как я знаю, каждый процесс, выполняющийся в bash, является дочерним процессом этого bash. Например, если я запускаю бесконечный цикл в bash, ОС будет fork bash и создать новый дочерний процесс для запуска этого цикла. Тогда, если я нажму ctrl + c, дочерний процесс будет убит. Теперь я смущен тем, кто является отправителем сигнала, так как я думаю, что процесс родительского bash ждет сейчас. Является ли он сам процессом или ядром? Насколько я знаю, действия клавиатуры могут вызвать серьезные перерывы, которые могут обрабатываться только ядром, или же дочерний процесс переходит в состояние ядра при нажатии клавиши?Как передается сигнал при нажатии ctrl + c

+0

У меня был ответ здесь http://stackoverflow.com/questions/9853921/installing-sigtstp-foreground-process/9854819#9854819 –

ответ

0

Ваше понимание неверное.

Это не «окс-форкинг-баш», это просто удар, потому что это просто тривиальный случай, который вы имели ввиду в первую очередь.

В любом случае драйвер tty «отправляет» сигнал на передний план (здесь: bash), и указанный процесс может поймать его и действовать на него, например. разбить петлю.

+0

bash и forked loop - это два процесса, но кто теперь является fg, который вы сказали ? –

+0

, произнеся «os forks bash», я имею в виду, что fork - системный вызов, можете ли вы порекомендовать мне некоторые статьи или книги, чтобы понять, какие детали здесь? –

+0

Я сказал для простого, пока это правда; делать эхо дерьмо; сделано, в первую очередь не выполняется разметка, и вы можете легко проверить, запускаете ли вы процесс bash в strace. К сожалению, у меня нет хорошего ресурса для вас, скорее всего, вам понадобится продвинутое программирование в среде UNIX от Stevens. –

Смежные вопросы