
Estoy escribiendo un script PHP para iniciar y monitorear procesos. Solía ps <pid>
hacer esto, pero en casos raros no es confiable ya que había un proceso irrelevante ejecutándose con el mismo pid después de que mi proceso realmente terminó.
Entonces quería agregar una cadena aleatoria en mi comando para que mi script PHP pueda estar seguro de que es el proceso que inició. ¿Cuáles son mis opciones para hacer esto?
Hasta ahora se me ocurrió esto:
"USELESS_VAR_0nQjdXR45P=\"{$cmdRandomString}\" | $cmd"
Donde $cmd es el comando real que quería ejecutar. $cmdRandomString es la cadena aleatoria que agregué. Pero por alguna razón, no ps aux
muestra la var inútil aquí.
¿Es porque terminó rápidamente?
También intenté agregar una opción de comando ficticia, --xxxx=yyyy
pero el comando arrojaba un error fatal al no conocer la opción.
¿Hay alguna manera de hacer esto? ¿O existe alguna forma confiable de identificar un proceso que no sea el pid no confiable?
Respuesta1
¿Existe alguna forma confiable de identificar un proceso que no sea el pid no confiable?
La forma de hacerlo de manera confiable es iniciando el proceso usted mismo y detectando cuando muere, por ejemplo, cuando recibe la señal Unix SIGCHILD. El pid seguirá existiendo (en un estado llamado "zombi") hasta que consumas la notificación de muerte infantil, por ejemplo waitpid()
.
En algunos casos, necesitará delegar esto a un demonio supervisor de procesos, por ejemplo systemd
. Por ejemplo, entonces podrías consultarlo usando systemctl status my-process.service
. Esto sería útil si tuviera una página web PHP que necesitara iniciar un proceso de larga duración como un demonio.