Много раз я случайно запускал cat
команду для файлов, которые содержат до нескольких тысяч строк.
Я пытаюсь убить cat
команду с помощью Ctrl+ Cили Ctrl+ Z, но оба вступают в силу только после того, cat
как в терминале отображается общий вывод , поэтому я должен ждать, пока cat
полностью не выполнится.
Есть ли лучшее решение, которое позволяет избежать ожидания? Потому что иногда файлы имеют размер до 100 МБ, и их раздражает ожидание.
Я использую tcsh
.
curiosity
команду ...alias curiosity='sudo killall cat'
Ответы:
Если рассматриваемый файл (-ы) содержит действительно много данных, отправляющих сигнал, он может фактически добраться
cat
до его завершения. Что вы действительно наблюдаете, так это конечную скорость вашего терминала -cat
отправляет данные на терминал, и терминалу требуется некоторое время, чтобы отобразить все это.Помните, что обычно необходимо каким-то образом перерисовывать все окно вывода для каждой строки вывода (т.е. перемещать содержимое окна на одну строку вверх и печатать следующую строку внизу). Хотя есть методы и алгоритмы, которые делают это быстрее, чем если бы это было сделано простым способом, это все же занимает некоторое время.
Таким образом, если вы хотите избавиться от вывода как можно быстрее, спрячьте окно терминала , потому что тогда обычно не происходит никакого реального перерисовывания. В графической среде это может означать либо сворачивание окна, либо переключение на другой виртуальный рабочий стол, на виртуальной консоли Linux просто переключитесь на другую (( Ctrl+) Alt+ ).Fx
Также обратите внимание, что если вы запускаете это по медленному сетевому каналу (например, SSH через GSM-соединение), вы наверняка увидите намного меньше выходного сигнала до того
cat
, как сигнал прекратится, потому что скорость терминала больше не будет узким местом. ,источник
~?
чтобы увидеть доступные параметры (~.
закрывается).tty-stop-output
. Затем вы можете отправить Ctrl + C. Чтобы возобновить вывод, нажмите Ctrl + Q ...Настройка терминала
Я считаю, что это больше связано с тем, как настроен терминал, чем с любой проблемой буферизации. Проверьте выходные данные
stty -a | grep intr
, вы должны иметьintr = ^C;
в выходной строке, если Ctrl- Cвключен вtty
/pty
. Если это не так, вы можете использовать,stty intr ^C
чтобы включить его. Добавьте строку в ваш.tcshrc
или,.login
чтобы сделать ее постоянной (или удалите строку, которая меняет ее в первую очередь!).В противном случае Ctrl- Cвы также можете попробовать отправить
SIGQUIT
с Ctrl- \. Если это не работает, еще раз проверьте,stty -a | grep quit
правильно ли он настроен.Настройка эмулятора терминала
Также проверьте настройки для вашего эмулятора терминала (если вы его используете), возможно, на этом уровне настроен ярлык (возможно, для копирования или чего-то еще), а - Ctrl- Cне достигает
pty
уровня. Ярлык также может быть установлен где-то еще в вашей среде рабочего стола или в системе Windows.Хорошим тестом для Linux, если вы используете эмулятор терминала, является переключение на консоль Linux ( Ctrl- Alt- F1), войдите в систему и посмотрите, происходит ли то же самое. Если этого не произойдет, значит, проблема в вашей оконной системе или эмуляторе терминала.
Это может быть проблемой с задержкой между считыванием данных с
pty
устройства, как это было предложено peterph . Но если это так , и вы на самом деле приходится ждать минут данные , которые будут отображаться, то , конечно, эмулятор терминала буферизация путь слишком много данных (или ваш компьютер очень медленно). Ответ заключается в том, чтобы найти способ уменьшить размер буфера в настройках эмулятора терминала или использовать другой.Дополнительный совет
Что-то еще стоит добавить; Я обычно оказываюсь в безудержной
cat
ситуации, когда я случайноcat
бинарный файл. Другим эффектом этого может быть испортить настройки терминала (если двоичные данные совпадают с различными кодами выхода терминала, что часто происходит). Еслиtput
установлено (обычно по умолчанию), вы можете избежать перезагрузки с помощью следующей команды:источник
Это то, что
tmux
вариантc0-change-interval
иc0-change-trigger
предназначен для. Вы все равно должны использовать менеджер экрана для возобновления сеанса.источник
Опция Ctrl- Oиспользуется в Unix с 110 бод. Команды Runaway cat всегда были проблемой, когда длинный медленный файл ASCII был выгружен на медленном устройстве вывода, а весь файл помещался в выходной буфер драйвера устройства. Ctrl- Oзапускает очистку буфера и последующее наблюдение Ctrl- Oотключает очистку, чтобы кот мог читать с нормальной скоростью. Ctrl- Oбыл введен, и весь файл будет очищен и быстро вернет командную строку.
Чувствовали ли кодировщики драйверов устройств Linux необходимость продолжать добавлять эту функцию, неизвестно. Эта функция была добавлена на уровне драйвера устройства, где Ctrl- Sи Ctrl- Qможет быть реализовано только. Я использовал это, чтобы выгрузить большие отладочные прогоны с большим количеством чековой печати, а затем прокрутить вниз до места, которое мне нужно было увидеть.
источник
При использовании bash вы можете приостановить работу, используя Ctrl+, Zа затем убить ее, используя PID или следуя ответам на https://stackoverflow.com/questions/1624691/linux-kill-background-task (например, kill -9 %%)
источник
tcsh
и Ctrl + Z не работает ... уже было сказано , что в вопросе.откройте новую консоль, например, нажав на значок консоли или нажав Ctrl+ Alt+ F2. Там введите
и cat будет убит, если у вас нет устаревшей блокировки NFS или ситуации "непрерывного сна" (чтение в плохом секторе без тайм-аута).
источник
cat
, что речь идет о том, чтоcat
было записано в терминал перед смертью и еще не было прочитано, не говоря уже о том, что оно обрабатывалось или отображалось эмулятором терминала (и находится в буфере (около 64 кБ в Linux) внутри драйвера pty) ,drop_caches
управляет страницами, используемыми ядром в качестве кэша (обычно для файловой системы), а не внутренними буферами терминалов, сетевыми драйверами и тому подобным - в противном случае это имело бы весьма серьезные последствия, как указал Стефан (в основном вы потеряете данные) ,killall -9 cat
уничтожит ли также другие экземпляры cat, которые все еще могут делать хорошие вещи в других потоках процесса?Вы можете попробовать с этим
Сброс дисплея использование ctrl-j
Если cat все еще работает, откройте новый терминал и запустите
pkill -9 -f cat
«Это убьет все процессы cat».источник
pkill -f cat
на моем рабочем столе будет убита область панели задач панели задач Xfce4.