Tengo un script que ejecuta algunos programas en segundo plano, pero después de ejecutarlo, no aparecen en el comando 'trabajos'. ¿Por qué es esto?
(./m_prog -t m_prog1 m_config) &
(./m_prog -t m_prog2 m_config) &
(./m_prog -t m_prog3 m_config) &
Pero si ejecuto cada uno de ellos desde la terminal, sí aparecen en 'trabajos'
¿Cómo puedo obtener el mismo efecto con los comandos ejecutados en un script?
Respuesta1
jobs funciona solo para la creación de instancias del shell que creó los trabajos. jobs n
use números, no el pid. Una vez que el shell se ejecuta dentro de un script (otro proceso nuevo), el antiguo shell que inició el script y los trabajos (emitidos en el antiguo shell) ya no pueden hacer referencia al trabajo n.º 1 en el nuevo shell.
¿Por qué? Porque el shell actual podría tener su propio trabajo n.° 1. UNIX/Linux mantiene lo que se conoce como grupo de procesos o sesión. El líder del grupo de la sesión es el proceso propietario del tty e interactúa con él a través del teclado. Busque la descripción de la función setsid() en su manual. Si el proceso se inició y aún se ejecuta como hijo bajo el antiguo shell principal, el líder, entonces el comando jobs funcionará. De otra manera no.