Script de shell de Linux duplicado en la lista de procesos

Script de shell de Linux duplicado en la lista de procesos

He desarrollado unscript de bashque acepta parámetros:

$ head -n 3 MyScript.sh
#!/usr/bin/env bash
# This is my script
#... do something

lo llamo víacronoen diferentes horarios y con diferentes parámetros:

$ crontab -l
* * * * * MyScript.sh 1 -t 600
*/2 * * * * MyScript.sh 40
*/3 * * * * MyScript.sh 41,42
*/5 * * * * MyScript.sh 61
* * * * * MyScript.sh 21

Al querer saber quelas instancias se están ejecutando(el script no es muy largo, solo unos segundos de ejecución):

$ pgrep -f -a -l "MyScript.sh"
25003 /bin/sh -c MyScript.sh 21
25005 /bin/sh -c MyScript.sh 41,42
25006 bash /bin/MyScript.sh 21
25007 bash /bin/MyScript.sh 41,42
25008 /bin/sh -c MyScript.sh 40
25009 bash /bin/MyScript.sh 40
25010 /bin/sh -c MyScript.sh 1 -t 600
25012 bash /bin/MyScript.sh 1 -t 600

Podemos ver en el ejemplo anterior la MyScript.sh 21instancia (y cualquier otra)aparentemente corriendo dos veces, uno de ellos empezó vía bashy el otro vía /bin/sh -c. Ambos empiezan y terminan al mismo tiempo, como he confirmado con htop.

Estoy realizando estas pruebas en RaspBian (Debianbasado).

A continuación se muestra un ejemplo de lo que sucede cuando se ejecuta el mismo script enFreeBSD:

$ pgrep -f -a -l "MyScript.sh"
78230 bash /bin/MyScript.sh 103
78106 bash /bin/MyScript.sh 470
77484 bash /bin/MyScript.sh 2
77430 bash /bin/MyScript.sh 451
77019 bash /bin/MyScript.sh 52
76922 bash /bin/MyScript.sh 101 -v -d
76642 bash /bin/MyScript.sh 1 -t 600
76174 bash /bin/MyScript.sh 102 -v -d

Como puede verse, BSD no tiene estas instancias repetidas.

Por qué está pasando estoen RaspBian y ¿cómo podríaresolver¿él? En realidad, ¿necesito "resolverlo"?

Respuesta1

Su secuencia de comandos está haciendo algo dentro de las subcapas. Ejemplo:

#!/usr/bin/env bash

sleep 10
echo outer done
#!/usr/bin/env bash

(sleep 10; echo inner done)
echo outer done

Si ejecuta el primero de ellos, no hay subshell, por lo que solo verá uno en la lista de procesos. Si ejecuta el segundo de ellos, hay un subshell, por lo que se bifurcará y verá dos en la lista de procesos. (Si desea obtener más detalles sobre su situación exacta, publique el contenido completo de su guión en la pregunta).

información relacionada