¿Por qué no puede terminar este proceso?

o

Recientemente me encontré con un problema en el que mi programa de red no podía vincularse a un puerto porque ya estaba en uso. Abrí el monitor de actividad y me di cuenta de que (llamado "servidor") ya se estaba ejecutando anteriormente, aunque había cerrado la ventana y supuestamente había terminado. Quit o Force Quit en el proceso no hacen nada. ¡Incluso reinicié la computadora pero todavía estaba allí! Esto no ha sucedido con mi programa antes. Incluso tecleé en la terminal kill 4517y no pasó nada. ¿Ayuda?

Si el proceso volvió a aparecer automáticamente después de reiniciar, "algo" lo reinició por usted. ¿Qué tipo de "programa de red" estamos viendo aquí?

Respuestas (2)

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

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/LaunchAgentsy /Library/LaunchDaemons– agentes y demonios para todas las cuentas de usuario
  • /System/Library/LaunchAgentsy /System/Library/LaunchDaemons– agentes y demonios a nivel del sistema

y generalmente se nombran en notación de dominio inverso ( tld.domain.process.plist). Dependiendo de si la cuenta de usuario de serveres suya o no (no puedo decirlo, ya que la ha dejado en blanco), debe buscar en una de las dos primeras ubicaciones anteriores una lista probable (si tiene instalado Xcode, puede consultarlos fácilmente). ). Si lo encuentra, serverde hecho está 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 plistsufijo).

También hay una GUI para manejar archivos lanzados , Lingon de Peter Borg (asegúrese de obtener "Lingon", no "Lingon 3", que es una versión simplificada segura para uso estándar), que podría ser más conveniente que rootear manualmente a través del ubicaciones de archivos.

Prueba esto.

    sudo kill -9 4517

Donde 4517 es el PID del proceso.

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