Я пытаюсь установить фоновый процесс автоматически.
nohup program > /tmp/program.log 2>&1 < /dev/null &
disown
Если я проверяю, запущен ли процесс, и запускаю его при входе в систему через ".bashrc", программа запускается, но затем Умирает при выходе.
НО, если я делаю точно такую же команду в командной строке, программа продолжает работать в фоновом режиме, когда я выхожу.
Я не могу найти никакой разницы в программной среде междуначало bashrc и начало кли(Bashrc почти ничего не имеет).Мое понимание программы в обоих случаях должно рассматриваться одинаково.
В чем разница, и как я могу остановить уничтожение запущенного 'демона' bashrc при выходе из оболочки.
PS:удаление nohup не имеет значения.и я наблюдал, как работающая программа затем умирала от отдельного входа в систему, когда исходный вход в систему выходил.
И до того, как кто-то что-то скажет ... Добавление «disown» после фоновой обработки программы в bashrc НЕ исправило это!
ОБНОВЛЕНИЕ: Если соединение входа в систему ssh прервано (окно закрыто или соединение внезапно прервано), программа, запущенная в bashrc, продолжает работать, но это происходит потому, что запущенный bash также все еще работает (вхотя бы пока).Фон удаляется только в том случае, если для bash вы набираете «exit», или bash уничтожается (даже при необратимом сигнале 9!).
PPID программы (отрицаемой оболочкой) равен 0, чтоего родитель не является оболочкой или процессом инициализации!Это случай, независимо от того, как он запускается.
ОБНОВЛЕНИЕ 2 ... фоновая программа запущена из bashrc ...
# ps -jA w
PID PGID SID TTY STAT TIME COMMAND
891 891 891 pts/2 Ss+ 0:00 /bin/bash
899 891 891 pts/2 Sl+ 0:00 program
Я убил его, затем запустил его из командной строки ...
891 891 891 pts/2 Ss+ 0:00 /bin/bash
958 955 891 pts/2 Sl 0:00 program
Теперь, когда оболочка существует, программа не завершается.Таким образом, похоже, единственное отличие - это изменение PGID.
Как запустить процесс с другим PGID?