Почему шпатлевке требуется время для доставки сигналов «ctrl + c» процессу, которые сильно выводятся на стандартный вывод?

Каждый раз, когда процесс сильно печатает на stdout , если я пытаюсь убить процесс с помощью отправки сигнала "ctrl + c" , процесс не останавливается сразу. Но если я перенаправляю вывод в файл, процесс немедленно останавливается, если я нажимаю «ctrl + c» . Infact Если я использую gnu screen , и мой процесс сильно выводит на stdout , то я также не могу переключить вкладку . Почему такое поведение

0
задан 21 December 2015 в 08:58
1 ответ

Процесс может генерировать выходные данные намного быстрее, чем комбинация сети и экрана может их отобразить.

При нажатии ctrl-C эта последовательность клавиш может занять некоторое время, чтобы добраться до сервера, на котором запущен процесс из-за перегрузки сети, вызванной всем выводом; а когда процесс завершается, может потребоваться значительное время, прежде чем весь уже сгенерированный вывод будет отправлен на экран из-за буферизации в различных местах: сначала сетевой буфер на сервере, пакетные буферы в пути на e. g. маршрутизаторы, входная сетевая очередь на системе отображения, а затем входной буфер ssh / screen / X окон (в зависимости от того, где запущен экран screen). При использовании закладок экрана

при переключении screen возникает в основном та же проблема: последовательность ctrl-AA может задерживаться по пути к серверу, затем экран screen может сразу переключить отображаемый терминал, но это будет видно только после того, как на локальной системе отобразится все, что уже находится в процессе работы.

.
1
ответ дан 4 December 2019 в 16:44

Теги

Похожие вопросы