Plusieurs fois, j'exécute accidentellement la cat
commande sur des fichiers dont le contenu ne dépasse pas quelques milliers de lignes.
J'essaie de tuer la cat
commande avec Ctrl+ Cou Ctrl+ Z, mais les deux ne prennent effet qu'après l' cat
affichage de la sortie totale de dans le terminal. Je dois donc attendre jusqu'à ce que la commande cat
soit complètement exécutée.
Existe-t-il une meilleure solution qui évite d’attendre? Parce que, parfois, les fichiers ont une taille pouvant aller jusqu'à 100 Mo et il est agaçant d'attendre.
J'utilise tcsh
.
curiosity
commande ...alias curiosity='sudo killall cat'
Réponses:
Si le ou les fichiers en question contiennent vraiment beaucoup de données, le signal peut être reçu
cat
avant la fin. Ce que vous observez réellement est la vitesse finie de votre terminal: ilcat
envoie les données au terminal et le terminal prend un certain temps pour tout afficher.Rappelez-vous qu’il est généralement nécessaire de redessiner la fenêtre de sortie entière pour chaque ligne de sortie (c’est-à-dire déplacer le contenu de la fenêtre d’une ligne à l’autre et imprimer la ligne suivante en bas). Bien qu'il existe des techniques et des algorithmes pour rendre cela plus rapide que si c'était fait de manière simple, cela prend encore du temps.
Ainsi, si vous souhaitez vous débarrasser le plus rapidement possible de la sortie, masquez la fenêtre du terminal , car aucun redessinage n’est effectué. Dans un environnement graphique, cela peut signifier soit de réduire la fenêtre, soit de passer à un autre bureau virtuel. Sur la console virtuelle Linux, il vous suffit de passer à un autre (( Ctrl+) Alt+ ).Fx
Notez également que si vous utilisiez cette fonction sur une liaison réseau lente (SSH via une connexion GSM, par exemple), vous auriez certainement beaucoup moins de sortie avant d'
cat
être éliminé par le signal, car la vitesse du terminal ne serait plus le goulet d'étranglement .la source
~?
pour afficher les options disponibles (se~.
ferme).tty-stop-output
. Vous pouvez ensuite envoyer Ctrl + C. Pour reprendre la sortie, appuyez sur Ctrl + Q ...Configuration du terminal
Je pense que cela a plus à voir avec la configuration du terminal qu'avec n'importe quel problème de mise en mémoire tampon. Vérifiez la sortie de
stty -a | grep intr
, vous devriez avoirintr = ^C;
sur la ligne de sortie si Ctrl- Cest activé sur letty
/pty
. Si ce n'est pas le cas, vous pouvez utiliserstty intr ^C
pour l'activer. Ajoutez la ligne à votre.tcshrc
ou.login
pour la rendre permanente (ou supprimez la ligne qui la modifie en premier lieu!).A défaut Ctrl- C, vous pouvez aussi essayer d' envoyer
SIGQUIT
avec Ctrl- \. Si cela ne fonctionne pas, vérifiezstty -a | grep quit
à nouveau pour voir s'il est correctement configuré.Configuration de l'émulateur de terminal
Vérifiez également les paramètres de votre émulateur de terminal (si vous en utilisez un), il se peut qu’un raccourci ait été configuré à ce niveau (peut-être pour une copie ou quelque chose d’autre) et que Ctrl- Cne parvient pas au
pty
niveau. Un raccourci peut également être configuré ailleurs dans votre environnement de bureau ou votre système Windows.Un bon test sous Linux si vous utilisez un émulateur de terminal consiste à basculer sur une console Linux ( Ctrl- Alt- F1), à vous y connecter et à voir si le même problème se produit. Dans le cas contraire, cela suggère que le problème provient de votre système Windows ou de votre émulateur de terminal.
Cela pourrait être un problème avec le délai entre la lecture des données à partir du
pty
périphérique, comme suggéré par peterph . Mais si tel est le cas et vous n'avez fait attendre minutes pour les données à afficher, alors sûrement l'émulateur de terminal est mise en mémoire tampon façon trop de données (ou votre PC est très lent). La solution serait de trouver un moyen de réduire cette taille de la mémoire tampon dans les paramètres de votre émulateur de terminal ou d’en utiliser un autre.Conseil supplémentaire
Quelque chose d'autre à ajouter; Je me retrouve généralement dans la
cat
situation d' emballement lorsque, par mégarde,cat
un fichier binaire. L’autre effet peut être de bousiller les paramètres de votre terminal (si les données binaires correspondent à différents codes d’échappement de terminal, ce qui est souvent le cas). Sitput
est installé (généralement par défaut), vous pouvez éviter de devoir redémarrer avec la commande suivante:la source
C'est ce que l'
tmux
optionc0-change-interval
etc0-change-trigger
conçu pour. Vous devriez quand même utiliser un gestionnaire d’écran pour une session pouvant être reprise.la source
L' option Ctrl- Oest sous Unix depuis 110 jours. Les commandes Runaway cat étaient toujours un problème lorsqu'un fichier ASCII long était vidé sur le périphérique de sortie lent et que le fichier entier était placé dans la mémoire tampon de sortie du pilote de périphérique. Ctrl- Olancerait la chasse et un suivi Ctrl- Obasculerait la chasse afin que le chat puisse être lu à vitesse normale. Ctrl- a Oété entré et le fichier entier s’est vidé et a renvoyé rapidement une invite de commande.
On ignore si les codeurs de pilotes de périphériques Linux ont estimé nécessaire de continuer à ajouter cette fonctionnalité. Cette fonctionnalité a été ajoutée au niveau du pilote de périphérique où Ctrl- Set Ctrl- Qn'a pu être implémenté. J'ai utilisé cela pour vider de grandes exécutions de débogage avec beaucoup d'impression de chèques, puis faire défiler jusqu'à l'endroit que j'avais besoin de voir.
la source
Lorsque vous utilisez bash, vous pouvez suspendre le travail à l’aide de Ctrl+ Zpuis le tuer, soit à l’aide du PID, soit en suivant les réponses fournies à l’ adresse https://stackoverflow.com/questions/1624691/linux-kill-background-task (par exemple, kill -9 %%)
la source
tcsh
et Ctrl + Z ne fonctionne pas ... déjà indiqué que dans la question.ouvrez une nouvelle console, par exemple en cliquant sur l’icône de la console ou en appuyant sur Ctrl+ Alt+ F2. Là, entrez
et le chat sera tué à moins que vous n'ayez un verrou NFS périmé ou une situation de "sommeil ininterruptible" (à lire sur un secteur défectueux sans délai d'expiration défini).
la source
cat
, il concerne ce quicat
a été écrit sur le terminal avant de mourir et qui n'a pas encore été lu, encore moins traité ou affiché par l'émulateur de terminal (et se trouvant dans une mémoire tampon (environ 64 ko sur Linux) dans le pilote pty) .drop_caches
contrôle les pages utilisées comme cache par le noyau (généralement pour un système de fichiers), pas les mémoires tampons internes des terminaux, les pilotes de réseau, etc. - Si cela se produisait, cela aurait des conséquences assez graves, comme le soulignait Stéphane (vous perdriez essentiellement des données). .killall -9 cat
tuerait pas non plus d'autres instances de chat qui pourraient encore faire de bonnes choses dans d'autres threads de processus?Tu peux essayer avec ça
Réinitialiser l' utilisation de l'affichage -ctrlj
Si cat est toujours en cours d'exécution, ouvrez un nouveau terminal et lancez l'opération
pkill -9 -f cat
"Ceci va tuer tous les processus cat."la source
pkill -f cat
sur mon bureau, la zone de la barre des tâches de la barre des tâches de Xfce4 serait détruite.