Quand je le fais tail -f filename
, comment quitter le mode sans l'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.
tail
n'est pas interactif; il ne prend pas de commandes.man signal
pour plustail
ou même de le tuer sans souci. Mais si vous voulez une alternative, envisagezmost
, qui a un mode "suivre" certes sous-documenté, initié avec Shift + F, et peut être proprement quitté avec Q.tail -f
n'est pas le cas :)Réponses:
Comme dit dans les commentaires, Ctrl-Cne tue pas le
tail
processus, ce qui se fait en envoyant un signal SIGTERM ou SIGKILL (l'infâme-9
...); il envoie simplement un SIGINT qui indique detail
mettre fin au mode avant et de quitter.Pour info, c'est un meilleur outil:
Dans
less
, vous pouvez appuyer sur Ctrl-Cpour terminer le mode avant et faire défiler le fichier, puis appuyez sur Fpour revenir à nouveau en mode avant.Notez que
less +F
beaucoup préconisent 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 «moins + F»?la source
tail
n'est pas tuée par CTRL-C et n'est pas interactive), je pense que ma réponse est plus que appropriée.kill <pid>
. Pour la plupart des programmes, il n'y a pas de différence réelle entreCtrl-C
(=SIGINT
),SIGTERM
et, dans une certaine mesure,SIGKILL
. L'action par défaut pour les trois est de simplement mettre fin au processus, comme s'ilexit()
avait été appelé, à l'exception du fait que pourSIGKILL
, aucun du code de mode utilisateur associé àexit()
n'est appelé (donc pas deatexit()
nettoyage, etc.).Ctrl-C
etSIGTERM
, en particulier, sont complètement identiques à moins que le programme ne les attrape explicitement et n'agisse en conséquence. La queue GNU ne le fait pas.exit()
être appelé.exit()
exécutera lesatexit()
gestionnaires et nettoiera les fichiers stdio ouverts (surtout le vidage des tampons de sortie). UnSIGINT
gestionnaire pourrait le faire, mais la plupart des programmes ne dérangent pas; Je ne sais pas sitail
.C'est ControlC:)
^C
( ControlC) envoie un SIGINT au processus, qui est défini comme: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 "gentiment" la queue) et bien que d'autres réponses fournissent un moyen de s'arrêtertail
autrement, elles ne sont pas meilleures.Appuyer 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 côté "pas bon" l'effet est les restes de ce processus. Par exemple,^C
au milieu d'unemake
commande laisse un logiciel partiellement compilé, mais c'est très bien: une autre exécution demake
nettoiera / reprendra là où elle s'était arrêtée.la source
make
exemple nous rappelle pourquoi nous écrivons toujours.DELETE_ON_ERROR:
dans nos Makefiles - nous voulons que Make supprime les fichiers intermédiaires partiellement écrits quand il apprend qu'une de ses commandes a reçu un signal.SIGINT
et nettoyer avant de quitter, comme indiqué dans l'.DELETE_ON_ERROR:
exemple de Toby .^C
:)Tu ne peux pas faire ça. Peut-être que tu voulais courir
tail -f somefile | less
Le Ctrl cest interprété par le sous-système tty (et par votre shell) et envoie un
SIGINT
signal (voir signal (7) et pty (7) ...). Voir tty démystifié .la source
Cela fonctionnerait et répondrait à votre question, mais ce n'est pas une solution particulièrement satisfaisante.
Cela exécutera la commande pendant 15 secondes puis la tuera sans avoir à appuyer sur
^C
la source
tail
est exécuté. Pourtant, vous ne vous trompez pas, je suppose.tail
avec SIGTERM est-elle meilleure que la terminaison avec SIGINT?Les réponses diffèrent selon le contexte. Pour quitter la queue -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.
J'ai utilisé des idées similaires dans le passé.
Prendre plaisir.
la source