1 votos

ps devuelve pid/nombre del proceso que llamó a script.sh

Estoy ejecutando una aplicación que llama a script.sh y me gustaría recuperar el PID o nombre de la aplicación invocadora dentro de ese mismo script.sh. En última instancia, en mi script.sh, estoy tratando de determinar si la aplicación o Terminal fue el invocador (con el fin de ejecutar diferentes comandos)

He añadido esto a mi script.sh

ps -p $PPID -o ucomm= >> /Users/john/Desktop/log.txt 2>&1

Parece que la aplicación está utilizando etc/launchd para abrir mi shell por defecto ( zsh ) para ejecutar el script y no esperar... Creo que a esto se le llama "proceso zombi"?

man ps dice

Cuando se imprime utilizando la palabra clave command, un proceso que ha salido y ha un padre que aún no ha esperado al proceso (en otras palabras, un zombi) aparece como "", y un proceso que está bloqueado mientras intenta salir aparece como "". salir aparece como "". Si los argumentos no pueden localizarse (normalmente porque no se han establecido, como es el caso de los procesos del sistema y/o hilos del núcleo) el nombre del comando se imprime entre corchetes. El proceso proceso puede cambiar los argumentos mostrados con setproctitle(3). De lo contrario, ps hace una estimación del nombre del fichero y los argumentos dados cuando se creó el proceso cuando se creó el proceso examinando la memoria o el área de intercambio. El método es inherentemente poco fiable y en cualquier caso un proceso tiene derecho a destruir esta información. Sin embargo, la palabra clave ucomm (contabilidad) puede ser depender de . Si los argumentos no están disponibles o no coinciden con los de ucomm, el valor de la palabra clave ucomm se añade a los argumentos entre paréntesis.

(El subrayado es mío)

Sin embargo no veo "defunct" o, cuando se utiliza la bandera ucomm Todo lo que se menciona en la página de manual.

¿Existe otro conjunto de banderas u opciones que pueda probar con ps para obtener más información?

4voto

Jose Chavez Puntos 645

Creo que aquí se están confundiendo dos conceptos, aunque es difícil saberlo, ya que no se ha obtenido la salida real de ps incluido.

En tu pregunta hablas de "procesos zombis". Los procesos zombis son programas hijos que han finalizado su ejecución, pero el proceso padre aún no ha recogido el valor de retorno de dicha ejecución. Así que si tu fichero script.sh se está ejecutando no puede ser por definición un proceso zombi.

Creo que tu proceso es en realidad un "proceso huérfano". Los procesos huérfanos son programas en los que el padre ha finalizado su ejecución, pero el proceso hijo sigue ejecutándose. En esos casos, el proceso padre en realidad "ha desaparecido", y el proceso con ID 1 toma el relevo como nuevo padre del proceso hijo. El proceso con ID 1 en una instalación estándar de MacOS es launchd .

Así que cuando compruebe el padre de su proceso y encuentre que es launchd podría significar simplemente que el padre real ha terminado de ejecutarse antes, y ahora launchd ha tomado el relevo como nuevo padre.

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