¿Por qué este proceso no puede terminar?

4

Hacepocomeencontréconunproblemaenelquemiprogramaderednopodíavincularseaunpuertoporqueyaestabaenuso.Abríelmonitordeactividadymedicuentadeque(llamado"servidor") ya se estaba ejecutando desde antes, a pesar de que había cerrado la ventana y supuestamente se había terminado. Salir o Forzar Salir en el proceso no hace nada. ¡Incluso reinicié la computadora pero todavía estaba allí! Esto no ha sucedido con mi programa antes. Incluso escribí en el terminal kill 4517 y no pasó nada. Ayuda?

    
pregunta slartibartfast 07.05.2012 - 01:33

2 respuestas

4

OS X utiliza un sistema de inicio de procesos llamado launchd que consolida las funciones proporcionadas por los scripts de Init, crontab y más en los sistemas * nix (consulte el artículo de Wikipedia para una descripción general de alto nivel y Documentos de desarrollador de Apple en demonios y agentes de lanzamiento para más detalles). Una de las capacidades de launchd es mantener vivo el proceso que lanzó, si así lo define su archivo de configuración; en ese caso, el proceso se reiniciará cada vez que se finalice. Su problema con un proceso que parece persistir en los reinicios y la terminación manual suena muy parecido a un caso iniciado por launchd con una clave keepAlive .

Los archivos de configuración de

launchd están en formato plist y se encuentran en

  • ~/Library/LaunchAgents : agentes solo para la cuenta de usuario actual
  • /Library/LaunchAgents y /Library/LaunchDaemons - agentes y daemons para todas las cuentas de usuario
  • /System/Library/LaunchAgents y /System/Library/LaunchDaemons - agentes y demonios a nivel del sistema

y normalmente se nombran en notación de dominio inverso ( tld.domain.process.plist ). Dependiendo de si la cuenta de usuario de server es suya o no (no puedo decirlo, ya que la ha dejado en blanco), debe buscar en una de las dos primeras ubicaciones de arriba para un posible error (si tiene instalado Xcode, puede QuickLook ellos fácilmente). Si lo encuentra, su server es controlado por launchd. El procedimiento correcto para detenerlo es eliminarlo de la lista de procesos de launchd a través de

launchctl unload <tld.domain.process>

que descargará y detendrá el proceso (tenga en cuenta que omite el sufijo plist ).

También hay una GUI para manejar los archivos de launchd , Peter Borg's Lingon (asegúrate de obtener "Lingon", no "Lingon 3", que es una versión sencilla para el uso de vainilla), que podría ser más conveniente que rastrear manualmente el archivo ubicaciones.

    
respondido por el kopischke 07.05.2012 - 12:49
2

Intenta esto.

    sudo kill -9 4517

Donde 4517 es el PID del proceso.

Si el proceso vuelve con un nuevo PID, algo lo relanzó. Vea la respuesta de kopischke para saber cómo lidiar con eso.

    
respondido por el dhempler 07.05.2012 - 03:44

Lea otras preguntas en las etiquetas