Tenho um script que executa alguns programas em segundo plano, mas após executá-lo, eles não são listados pelo comando 'jobs'. Por que é isso?
(./m_prog -t m_prog1 m_config) &
(./m_prog -t m_prog2 m_config) &
(./m_prog -t m_prog3 m_config) &
Mas se eu executar cada um deles no terminal, eles aparecerão em 'jobs'
Como posso obter o mesmo efeito dos comandos executados em um script?
Responder1
jobs funciona apenas para a instanciação do shell que criou os jobs. jobs n
use números, não o pid. Depois que o shell é executado dentro de um script (outro novo processo), o shell antigo que iniciou o script, os trabalhos (emitidos no shell antigo) não podem mais fazer referência ao trabalho nº 1 no novo shell.
Por que? Porque o shell atual pode ter seu próprio trabalho nº 1. UNIX/Linux mantém o que é conhecido como grupo de processos ou sessão. O líder do grupo da sessão é o processo que possui o tty e interage com ele através do teclado. Procure a descrição da função setsid() em seu manual. Se o processo foi iniciado e ainda é executado como filho no antigo shell pai - o líder, o comando jobs funcionará. Caso contrário, não.