Estoy intentando ejecutar esto
watch "ps aux | grep myShittyProcess"
en una sesión tmux. Este proceso myShittyProcess
también se inició en una sesión tmux. Funciona ps aux
sin mando de reloj. Pero tan pronto como lo pongo en vigilancia, no se ejecuta. ¿Cómo hacer que esto funcione?
-- editar -
Descubrí que cambiar el tamaño de tmux a pantalla completa hace que funcione. Algo que tiene que ver con ps
el ajuste de salida y grep
no se puede encontrar dentro del contexto ajustado.
Respuesta1
Como se menciona en la pregunta editar yLa respuesta de xzfc, el problema parece estar relacionado con el ajuste de línea de tmux. Para algo más parecido a un reemplazo directo de ps aux | grep [q]uote
, si no necesita información del usuario, intente:
$ pgrep -af [q]uote
392 bash -c sleep 5 && echo quote
399 bash -c sleep 5 && echo second quote
$ watch pgrep -af [q]uote
La -a
bandera hace que la salida incluya los argumentos de la línea de comando, mientras que -f
le permite buscar los argumentos de la línea de comando, así como solo el nombre del proceso.
Respuesta2
Correr
watch "COLUMNS= ps aux | grep TheProcessYouWatch"
Explicación: watch
establece ciertas variables ambientales adicionales, a saber COLUMNS
y LINES
. Esto se puede verificar fácilmente comparando env | grep COLUMNS
y watch 'env | grep COLUMNS'
.
Cuando COLUMNS
está configurado, ps
trunca su salida a esa cantidad de caracteres en una línea, incluso si la salida se canaliza a grep
(o cualquier otra cosa). ( ps
, ¿Por qué me haces esto?). Forzar COLUMNS
el estado vacío dentro watch
del comando es suficiente para que ps
funcione como OP (y yo) esperábamos.
Por cierto, para evitar watch
que grep
los procesos formen parte del resultado observado, considere agregar algo []
así:
watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"
(Por supuesto, también recomendaría familiarizarse con esto pgrep
. Otras respuestas serán útiles con esto).
Respuesta3
ps
es una utilidad que produce resultados legibles por humanos, y confiar en la recopilación de texto legible por humanos es una mala idea. Deberías usar pgrep myShittyProcess
en lugar de ps aux | grep myShittyProcess
. pgrep
produce una lista simple de pids, y si desea una salida menos aburrida, puede pasar pgrep
la salida a ps
:
ps -opid,user,args -p `pgrep myShittyProcess`
Para usar esa frase, watch
debe incluirla entre ' '
(no " "
) para evitar la sustitución temprana del comando Shell:
watch 'ps -opid,user,args -p `pgrep myShittyProcess`'