Quand je fais tail -f filename
, comment quitter le mode sans utiliser Ctrl+c
pour tuer le processus?
Ce que je veux, c'est une façon normale d'arrêter, comme q
dans top
.
Je suis simplement curieux de la question, car je pense que tuer le processus n'est pas un bon moyen d'arrêter quelque chose.
Comme indiqué dans les commentaires, Ctrl-C ne tue pas le processus tail
, ce qui se fait en envoyant un signal SIGTERM ou SIGKILL (l'infâme -9
...); il envoie simplement un SIGINT qui indique à tail
de mettre fin au mode avant et de quitter.
Pour info, c'est un meilleur outil:
less +F filename
Dans less
, vous pouvez appuyer sur Ctrl-C pour terminer le mode avant et faire défiler le fichier, puis appuyez sur F pour revenir à nouveau en mode avant.
Notez que less +F
est préconisé par beaucoup comme une meilleure alternative à tail -f
. Pour la différence et les mises en garde entre les deux outils, lisez cette réponse: `tail -f` est-il plus efficace que` less + F`?
Ce que je veux, c'est une façon normale d'arrêter, comme q en haut.
C'est ControlC :)
Je suis simplement curieux de la question, car je pense que tuer le processus n'est pas un bon moyen d'arrêter quelque chose.
^C
(ControlC) envoie un SIGINT au processus, qui est défini comme:
Le signal SIGINT est envoyé à un processus par son terminal de commande lorsqu'un utilisateur souhaite interrompre le processus
C'est exactement ce que vous voulez faire ici, c'est interrompre tail
. Il n'y a pas d'autre moyen d'accomplir ce que vous essayez de faire (quitter "joliment") et bien que d'autres réponses fournissent un moyen d'arrêter tail
par d'autres moyens, elles ne sont pas meilleures.
Appuyez sur ^C
tentera d'interrompre une tâche sous Linux - c'est tout à fait normal, et ce n'est "pas bon" si ce processus est au milieu de quelque chose et que vous ne le laissez pas se terminer, et alors le seul "pas bon" effet secondaire est les restes de ce processus. Par exemple, ^C
au milieu d'une commande make
laisse un logiciel partiellement compilé, mais c'est très bien: une nouvelle exécution de make
nettoiera/reprendra là où elle s'était arrêtée.
tail -f
nom de fichier, comment quitter le mode sans utiliser Ctrl c tuer le processus
Tu ne peux pas faire ça. Peut-être que vous vouliez exécuter tail -f somefile | less
Le Ctrl c est interprété par le sous-système tty (et par votre shell) et envoie un signal SIGINT
(voir signal (7) et pty (7) ... ). Voir tty démystifié .
Cela fonctionnerait et répondrait à votre question, mais ce n'est pas une solution particulièrement satisfaisante.
timeout 15s tail -f /var/log/messages
Cela exécutera la commande pendant 15 secondes, puis la tuera sans avoir à appuyer sur ^C
Délivrance
echo tail -n 1 -f <filename>
fonctionne pour moi bien que je ne sois pas sûr à 100% qu'il termine le processus de queue.
Les réponses diffèrent selon le contexte. Pour quitter tail -f avec élégance, vous aurez besoin d'un déclencheur. Supposons que vous essayez de surveiller la sortie d'une tâche qui se terminera à un moment donné - qui peut devenir votre déclencheur.
task >& filename.log &
task_pid=$!
tail -f filename.log &
tail_pid=$!
while [ 1 ]
do
# -0 is a special "poke" signal - "are you around?"
kill -0 $task_pid
if [ $? -eq 0 ]
then
# Original task is still alive.
sleep 2
continue
fi
kill -TERM $tail_pid
break
done
J'ai utilisé des idées similaires dans le passé.
Prendre plaisir.