Intereting Posts
Ошибка LLVM вместо 3D-ускорения в стабильной Debian Проблема с yum – ошибка при импорте одного из модулей python Исследование раздражающего короткого пользовательского интерфейса Получение «Ошибка протокола» при попытке создания символической ссылки в Docker Некоторые FTP-клиенты синхронизируют соединение с Pure-FTPd Linux apache устанавливает пользовательскую страницу запуска Virtualhosts С помощью команды «cat» Linux, как показать только определенные строки по числу Установка Lispworks на рабочую станцию ​​rhel 6.5. Ошибка при загрузке приложения Установка драйверов Nvidia Debian способ удаления десятков пакетов Установка минимальной скорости указателя без использования GNOME GUI Как использовать getopt в командной строке bash только с длинными опциями? tmux vs. GNU Screen Запуск сеанса GNOME с терминала Перемещение файлов с помощью find + xargs: target не является каталогом? Как изменить каталог на рабочий стол на немецком ubuntu?

Удаление данных из буфера потока STDIN другого сеанса TTY

На днях я столкнулся с проблемой при запуске нескольких сеансов tty в отдельных окнах терминала. Я запускал дорогостоящую команду доступа к диску и ожидал ее возвращения. Тем временем я работал в другой сеансе tty в отдельном окне в моей графической среде рабочего стола.

Неожиданно я сфокусировал терминал, который выполнял команду доступа к диску (в основном, команду cp ) и набрал следующее в терминал, думая, что я собираюсь ввести его в другое окно:

Введите

Основываясь на этом вопросе, я знал, что данные теперь находятся в буфере потока данных STDIN ожидающем немедленного запуска после возврата первой команды cp . И, как вы знаете, я просто попросил команду снова запустить: /.

Вопрос

Поскольку у меня было какое-то время (для этой команды потребовалось> 30 минут), есть ли способ, по которому я мог бы сбросить эти символы из буфера STDIN этого tty до того, как bash повторит процесс, который он заканчивал?

Или есть другой способ, кроме попытки сбросить данные из буфера потока файлов другого экземпляра bash, чтобы я мог избежать оценки данных, как только процесс, который я ожидал, закончил?

Если у вашего tty флаг noflsh отключен – вы можете проверить

 stty -a < /dev/pts/whatever | grep -e -noflsh 

из другого tty, но по умолчанию это то, что он выключен – тогда набрав символ прерывания, quit или suspend, выровняете очередь ввода. Поэтому, если вы наберете Ctrl-Z , то fg , он приостановит текущую команду, очистит вход, а затем возобновит команду.

Вероятно, вы должны отправить SIGSTOP в bash, чтобы он ничего не делал, и после завершения вашей задачи отправьте SIGKILL в bash.

Обратите внимание, что SIGSTOP запрещает bash ждать завершения вашей задачи, и вы получите зомби. После того, как SIGKILL init восстановит вашу задачу, и зомби исчезнет.