L'utilisation de la top
commande avec redirection fonctionne très bien:
top > top.log
Maintenant, je veux utiliser grep pour filtrer une certaine ligne:
top | grep "my_program" > top.log
Mais le fichier journal restera vide. Mais grep fournit une sortie lors de l'utilisation
top | grep "my_program"
Où my_program
doit être remplacé par un programme en cours d'exécution pour voir une sortie.
Pourquoi mon approche ne fonctionne-t-elle pas? Et comment puis-je le réparer?
-b
optiontop
ou utiliser à laps
place.-b
n'a pas résolu mon problème, mais a résolu quelques problèmes d'encodage. Je vous remercie.Réponses:
J'ai le même comportement que vous décrivez. Sur Ubuntu 11.10
ne produit aucune sortie.
Je crois que la raison en est que grep met en mémoire tampon sa sortie. Pour dire à GNU grep de cracher la sortie ligne par ligne, utilisez l'
--line-buffered
option:Voir également cette question SO pour d'autres solutions potentielles.
la source
--line-buffered
résout le problème.-b
option est également un bon conseil de Lev Levitsky. Cela a résolu certains problèmes de codage avec le fichier journal.Tu devrais utiliser:
le "-n 1" fonctionne en haut pour une itération puis se ferme au lieu de se mettre à jour continuellement toutes les quelques secondes
puisque vous cherchez juste une ligne bien que ps soit un meilleur outil à utiliser.
la source
Ma solution de contournement pour ce problème était:
De cette façon, je pourrais avoir un moniteur en cours d'exécution en arrière-plan pour mon_programme et conserver tous les résultats dans le fichier top.log.
la source
Essaye ça:
Qu'est-ce que cela signifie
2>&1
?la source
Bien que les deux fonctionnent pour moi, je pense que les conseils de Lev Levitsky sont les bons. Utilisez le
-b
argument.Il y a de fortes chances que la redirection de sortie soit le problème et que vous n'obteniez rien via stdout, essayez donc ceci à la place:
Notez que vous pourriez également avoir des problèmes avec la mise en mémoire tampon de sortie. Votre shell n'écrira pas constamment dans le fichier, il peut donc prendre un certain temps pour
top.log
se remplir.la source