Когда я это сделаю tail -f filename
, как выйти из режима без использования, Ctrl+c
чтобы убить процесс?
То, что я хочу, это нормальный способ бросить курить, как q
в top
.
Мне просто интересно этот вопрос, потому что я чувствую, что убийство в процессе не является хорошим способом бросить что-то.
tail
не является интерактивным; это не принимает команды.man signal
большеtail
или даже убить его, не беспокоясь. Но если вам нужна альтернатива, подумайтеmost
, у которой естьtail -f
разве это не так :)Ответы:
Как сказано в комментариях, Ctrl-Cне убивает
tail
процесс, который осуществляется путем отправки либо сигнала SIGTERM, либо SIGKILL (печально известного-9
...); он просто отправляет сигнал SIGINT, который сообщаетtail
об окончании режима пересылки и выходе.К вашему сведению, это лучший инструмент:
В
less
, вы можете нажать , Ctrl-Cчтобы закончить режим вперед и прокручивать файл, а затем нажмите кнопку , Fчтобы снова вернуться в режим вперед.Обратите внимание, что
less +F
многие выступают за лучшую альтернативуtail -f
. Чтобы узнать разницу и предостережения между двумя инструментами, прочитайте этот ответ: Является ли `tail -f` более эффективным, чем` less + F`?источник
tail
не уничтожена CTRL-C и не интерактивна), я считаю, что мой ответ более чем уместен.kill <pid>
делает. Для большинства программ, нет никакой разницы междуCtrl-C
(=SIGINT
),SIGTERM
и, в некоторой степени,SIGKILL
. Действие по умолчанию для всех трех состоит в том, чтобы просто завершить процесс, как если быexit()
он был вызван, за исключением того, что дляSIGKILL
, ни один из кода пользовательского режима, связанного с, неexit()
вызывается (так что никакихatexit()
очисток и т. Д.).Ctrl-C
иSIGTERM
, в частности, полностью идентичны, если только программа явно не ловит их и не действует на них. Хвост GNU не делает.exit()
что вызов.exit()
запуститatexit()
обработчики и очистит открытые файлы stdio (наиболее важно очистить выходные буферы).SIGINT
Обработчик мог бы сделать это, но большинство программ не беспокоить; Я не знаю,tail
делает ли .Это ControlC:)
^C
( ControlC) отправляет SIGINT процессу, который определяется как:Это именно то, что вы хотите сделать здесь, это прерывание
tail
. Нет другого способа выполнить то, что вы пытаетесь сделать («красиво» бросить хвост), и, хотя другие ответы дают возможность остановитьсяtail
другими способами, они не лучше.Нажатие
^C
попытается прервать задачу в Linux - это совершенно нормально, и это только «не хорошо», если этот процесс находится в середине чего-то, а вы не позволяете ему завершиться, а затем единственная сторона «не хорошо» Эффект остается от вещей этого процесса. Как пример,^C
в середине команды остаетсяmake
частично скомпилированное программное обеспечение, но это нормально: дальнейший запускmake
очистит это / возобновит с того места, где он остановился.источник
make
пример является напоминанием о том, что мы всегда пишем.DELETE_ON_ERROR:
в наших файлах Makefile - мы хотим, чтобы Make удалил частично записанные промежуточные файлы, когда он узнает, что одна из его команд получила сигнал.SIGINT
и очищать перед выходом, как показано в.DELETE_ON_ERROR:
примере Тоби .^C
:)Вы не можете сделать это. Возможно, вы хотели бежать
tail -f somefile | less
Он Ctrl cинтерпретируется подсистемой tty (и вашей оболочкой) и отправляет
SIGINT
сигнал (см. Signal (7) и pty (7) ...). Смотри tty демистифицированный .источник
Это сработает и ответит на ваш вопрос, но не является особенно удовлетворительным решением.
Это запустит команду на 15 секунд, а затем убьет ее для вас, не нажимая
^C
источник
tail
. Тем не менее, вы не ошиблись, я думаю.tail
с SIGTERM лучше, чем завершить с SIGINT?Ответы различаются в зависимости от контекста. Чтобы элегантно выйти из-под хвоста , вам понадобится триггер. Предположим, вы пытаетесь контролировать вывод задачи, которая завершится в определенный момент времени - это может стать вашим триггером.
Я использовал подобные идеи в прошлом.
Наслаждаться.
источник