En la situación actual, un determinado script 'calling.sh' lanza otro script 'called.sh' en segundo plano, realiza otras operaciones, duerme por un tiempo y luego termina 'called.sh' con un pkill called.sh
. Esto funciona bien
Entonces, también me gustaría lanzar 'called.sh' desde otros terminales como un script independiente en cualquier otro momento, ya sea antes o después de iniciar call.sh. Estas instancias independientes no deben eliminarse mediante 'calling.sh'.
¿Cómo puedo conseguir esto? La intuición dice que el script de llamada debería poder distinguir el proceso que comenzó de cualquier otro homónimo que se esté ejecutando mientras tanto.
Como variante, 'calling.sh' también puede lanzar 'called', que es un enlace simbólico a 'called.sh'. ¿Esto complica la gestión de la situación anterior? ¿Qué precauciones y ajustes específicos requiere el uso de un enlace simbólico?
Respuestas:
No uses el nombre para matarlo. Dado que el
calling.sh
script está llamando al proceso que luego desea eliminar, solo use$!
(fromman bash
):Entonces, si eres así
calling.sh
es:Cámbialo a esto:
fuente
$calledPid
PID principal del PID es el PID decalled.sh
.He tenido que elegir esto, pero de los guiones tantas veces; Es aún más divertido cuando los scripts se llaman como parte de un programa automatizado complejo. Realmente no deberías confiar en algo como
pkill
seleccionar qué script matar.Dentro de call.sh, debe registrar los PID de los trabajos que ha iniciado y eliminarlos explícitamente mediante PID.
Dentro de llamadas.sh:
fuente