1 votos

el comando grep es eliminado

Estoy corriendo grep -o $string ~/giant_file donde

string="foo
bar
baz"

Este proceso se sigue matando después de funcionar durante un tiempo y generar resultados, y no entiendo por qué. Cuando se mata, se muestra lo siguiente en la consola:

[1] 69923 killed grep --color=auto --exclude-dir={.bzr,.cvs,.git,.hg,.svn} $string *

¿Hay alguna forma de comprobar los registros del kernel para ver por qué ocurre esto? En linux tendría que /var/log/kern.log para ver si es un problema de OOM pero no estoy seguro de qué hacer en osx. Si no es un problema de OOM, no estoy seguro de lo que podría estar causando esto, por lo que otras hipótesis son bienvenidos.

0 votos

¿Qué quieres decir con "ser asesinado"? ¿Recibes algún tipo de mensaje, o simplemente se detiene demasiado pronto (antes de encontrar todas las ocurrencias)?

0 votos

@nohillside esto para consolar [1] 69923 killed grep --color=auto --exclude-dir={.bzr,.cvs,.git,.hg,.svn} $string * . Estoy empezando a sospechar que hay algún carácter en el archivo que lo está rompiendo, he intentado dividirlo en trozos, algunos funcionan otros no.

0 votos

¿Cómo de grande es giant_file ? Creo que MacOS mata automáticamente los procesos cuando el consumo de memoria supera algún umbral (muy alto). Una vez intenté convertir un archivo html de 1 GB que contenía toda la Enciclopedia Británica a otro formato; todas las herramientas se cerraban a mitad de camino con killed: 9 después de haber utilizado 40 GB de memoria más o menos.

2voto

  • Los registros están en /var/log/System.log También puede acceder a ellos ejecutando Consola.app
  • El consumo de memoria de un proceso se puede comprobar en Monitorización de la actividad.app al menos mientras el proceso esté en marcha

0voto

Jose Chavez Puntos 645

El mensaje de error que ves significa que algo más ha enviado al comando grep una señal de muerte. Esto no suele ocurrir por sí mismo.

Las señales enviadas generalmente no se registran en ningún archivo de registro, por lo que no las encontrará en /var/log/System.log por ejemplo.

grep no utiliza mucha memoria, por lo que es muy poco probable que se deba a un problema de OOM. Además, si lo fuera, no estaría recibiendo el mensaje de error "killed" - en su lugar grep fallaría con uno de estos mensajes de error: "malloc", "calloc" o "realloc".

La razón por la que su grep parece ser que lo has ejecutado "dentro" de algo más que lo gestiona. Podría ser una cola de trabajadores de Laravel, un sistema de pool de Python, un sistema de trabajadores de PHP, etc. - hay muchas posibilidades. Tendrás que mirar la documentación del sistema que estás utilizando para informarte de por qué mata los programas. Normalmente esto se debe a los tiempos de espera por defecto.

0 votos

Hmm, sólo lo ejecuté en la línea de comandos - no estoy seguro de cómo se ejecutaría dentro de algo?

0 votos

Hmm, eso suena raro entonces. Por favor, incluya información sobre lo que hizo exactamente, de lo contrario sólo tendremos que adivinar lo que está mal. ¿Acabas de iniciar Terminal.app y luego ejecutar ese comando? Parece que has ejecutado algo antes del comando grep para obtener la variable $string - así que por favor detalla las líneas de comando exactas y completas que has ejecutado.

0voto

Paul Puntos 170

Lo primero que intentaría sería examinar el valor de retorno.

$?  #in zsh, should be the same in bash. 

Como estás ejecutando esto en el shell, deberías poder verlo en launchd. Inténtalo:

launchctl list #the easiest invocation

Se obtienen 2 filas, la primera es el PID, la segunda es el estado de salida.

La invocación adecuada es:

launchctl print gui/$UID/  # for processes run in the gui. 

Lo mismo, los trabajos en ejecución tienen un pid, y la segunda columna es el código de salida. Si es negativo, entonces es la señal de que se atrapó.

También puedes simplemente pulsar CMD-I, y ver cómo se ejecuta en el inspector de la terminal. Haz clic en el engranaje para mostrar los argumentos del programa. A menudo veo la actualización de Homebrew de esta manera.

Hace tiempo ( antes de SIP ) se podía utilizar simplemente DTrace:

man kill.d # man -k DTrace to see them all

Esto sería lo primero que probaría, te dirá qué proceso envió la señal. Por desgracia, Apple ha paralizado esta excelente colección de herramientas. Seguro que funciona si desactivas el SIP, pero si tienes estómago para ello, puedes beber directamente de la manguera:

sudo fs_usage -w  # So many things running. :(

Obtendrás tu respuesta de esta manera.

Verás que tu grep muere, y verás quién lo mató.

Buena suerte.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X