regarder la sortie de “ps aux | grep blah ”dans tmux ne fonctionnera pas?

8

J'essaie de lancer ceci - watch "ps aux | grep myShittyProcess"dans une session tmux. Ce processus myShittyProcessa également été démarré dans une session tmux. Les ps auxtravaux sans surveillance. Mais dès que je le mets en veille, il n’exécute pas. Comment faire en sorte que cela fonctionne?

-- modifier -

Constaté que redimensionner tmux en plein écran le rend efficace. Quelque chose à voir avec le pswrapping de sortie et grepimpossible à trouver dans un contexte wrappé.

Shrinath
la source
Cela semble sans rapport avec tmux. J'ai rencontré ce problème avec et sans (sans = gnome-terminaldans mon cas).
Piotr Findeisen

Réponses:

3

Comme mentionné dans la question edit et la réponse de xzfc , le problème semble être lié au retour à la ligne de tmux. Pour quelque chose de plus proche d'un remplacement de la chute en ps aux | grep [q]uotesi vous n'avez pas besoin d' informations utilisateur,, essayez:

$ pgrep -af [q]uote
392 bash -c sleep 5 && echo quote
399 bash -c sleep 5 && echo second quote

$ watch pgrep -af [q]uote

L' -aindicateur permet à la sortie d'inclure les arguments de la ligne de commande, tandis que -fvous permet de rechercher les arguments de la ligne de commande ainsi que le nom du processus.

Walt W
la source
4

Courir

watch "COLUMNS= ps aux | grep TheProcessYouWatch"

Explanation: watchdéfinit certaines variables env supplémentaires, à savoir COLUMNSet LINES. Cela peut être facilement vérifié en comparant env | grep COLUMNSet watch 'env | grep COLUMNS'.

Quand COLUMNSest défini, pssa sortie est tronquée à autant de caractères d'une ligne, même si la sortie est dirigée vers grep(ou quoi que ce soit d'autre). ( pspourquoi tu me fais ça?) Forcer COLUMNSà être vide dans watchla commande de s est suffisant pour faire psfonctionner comme prévu (et I).

Btw, pour éviter watchque les grepprocessus fassent partie de votre sortie surveillée, envisagez d'ajouter []ce qui suit :

watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"

(Bien sûr, je vous recommande de vous familiariser pgrepégalement. D'autres réponses vous aideront à cela.)

Piotr Findeisen
la source
2

psest un utilitaire qui produit une sortie lisible par l’homme, et s’appuie sur un texte lisible par l’homme est une mauvaise idée. Vous devriez utiliser pgrep myShittyProcessau lieu de ps aux | grep myShittyProcess. pgrepproduit une liste nue de pids, et si vous voulez une sortie moins ennuyeuse, vous pouvez passer pgrepla sortie à ps:

ps -opid,user,args -p `pgrep myShittyProcess`

Pour utiliser ce one-liner avec watchvous, vous devez le mettre entre ' '(et non " ") pour empêcher le remplacement précoce des commandes de shell:

watch 'ps -opid,user,args -p `pgrep myShittyProcess`'
xzfc
la source
Comment géreriez-vous une situation dans laquelle votre processus de base est identique, mais vous souhaitez uniquement ceux qui utilisent une configuration spécifique? Avec ps, cela montrerait la commande exécutée et nous pourrons donc la grep ...
Shrinath