почему задания не перечисляют команды из скрипта

почему задания не перечисляют команды из скрипта

У меня есть скрипт, который запускает некоторые программы в фоновом режиме, но после его запуска они не отображаются в списке команды 'jobs'. Почему так?

(./m_prog -t m_prog1 m_config) &
(./m_prog  -t m_prog2  m_config) &
(./m_prog  -t m_prog3  m_config) &

Но если я выполню каждую из них из терминала, они появятся в «заданиях»

Как можно добиться того же эффекта от команд, выполняемых в скрипте?

решение1

jobs работает только для инстанциации оболочки, которая создала jobs. jobs nиспользуйте числа, а не pid. После того, как shell запущен внутри скрипта (другой новый процесс), старая оболочка, которая запустила скрипт, jobs (выпущенные в старой оболочке) больше не могут ссылаться на job # 1 в новой оболочке.

Почему? Потому что текущая оболочка может иметь свою собственную задачу № 1. UNIX/Linux поддерживает то, что известно как группа процессов или сеанс. Лидер группы сеанса — это процесс, который владеет tty и взаимодействует с ним через клавиатуру. Найдите описание функции setsid() в вашем руководстве. Если процесс был запущен и все еще работает как дочерний в старой родительской оболочке — лидере, то команда jobs будет работать. В противном случае — нет.

Связанный контент