Usar el top
comando con redirección funciona bien:
top > top.log
Ahora quiero usar grep para filtrar una línea determinada:
top | grep "my_program" > top.log
Pero el archivo de registro permanecerá vacío. Pero grep ofrece una salida cuando se usa
top | grep "my_program"
Donde my_program
tiene que ser reemplazado por un programa en ejecución para ver algunos resultados.
¿Por qué mi enfoque no funciona? ¿Y cómo puedo arreglarlo?
-b
opcióntop
o usar en sups
lugar.-b
No resolvió mi problema, pero resolvió algunos problemas de codificación. Gracias.Respuestas:
Me sale el mismo comportamiento que usted describe. En Ubuntu 11.10
No produce ninguna salida.
Creo que la razón de esto es que grep está amortiguando su salida. Para decirle a GNU grep que escupe la salida línea por línea, use la
--line-buffered
opción:Vea también esta pregunta SO para otras posibles soluciones.
fuente
--line-buffered
resuelve el problema.-b
opción sigue siendo un buen consejo de Lev Levitsky también. Eso resolvió algunos problemas de codificación con el archivo de registro.Deberías usar:
el "-n 1" se ejecuta en la parte superior durante una iteración y luego se cierra en lugar de actualizarse continuamente cada pocos segundos
ya que solo está buscando una línea, aunque ps sería una mejor herramienta para usar.
fuente
Mi solución para este problema fue:
De esta manera, podría tener un monitor en ejecución en segundo plano para my_program y mantener todos los resultados en el archivo top.log.
fuente
Prueba esto:
¿Qué significa
2>&1
?fuente
Aunque ambos funcionan para mí, creo que el consejo de Lev Levitsky es el correcto. Usa el
-b
argumento.Existe una buena posibilidad de que la redirección de salida sea el problema y que no esté obteniendo nada a través de stdout, así que intente esto en su lugar:
Tenga en cuenta que también podría tener problemas con el búfer de salida. Su shell no escribirá constantemente en el archivo, por lo que podría tardar un tiempo
top.log
en completarse.fuente