Я допомагав колезі, який мав проблеми з фоновим процесом, що періодично вмирав.
Я дізнався, що вони починають фоновий процес, увійшовши на сервер і виконавши:
su - <user> -c '<command>' &
- Ага, - вигукнув я. "Якщо ви запускаєте команду з" & ", вона зависне, коли ви виходите з керуючого терміналу. Для цього потрібно використовувати щось на кшталт nohup. Дійсно, цей процес повинен підтримувати запуск як демон, tut tut."
Ми перевірили вищевказану команду, щоб продемонструвати свою точку зору, і ... здавалося, це працює: процес, розпочатий командою , не закінчувався, коли ми виходили з терміналу, який виконував вищевказану команду.
Команда - це користувацький скрипт Python, вихід якого надходить у файл. Наскільки я можу сказати, у сценарію немає такого розумного "демонізування", як здатність. Він не робить жодної з речей, необхідних для запуску демона, переліченого у Вікіпедії: Демон (обчислення): сторінка створення .
Виконання команди на зразок так поводиться як очікувалося:
<command> &
exit
У наведеному вище випадку фоновий процес, розпочатий командою, закінчується, коли ми виходимо з терміналу.
Моє запитання таке:
Що відбувається, коли ми додаємо "su--c &", що запобігає виходу із процесу, коли наш термінал виходить. Я хотів би детально розібратися щодо керуючого терміналу, стандартного вводу та виводу тощо.
Це розумний спосіб досягти мети виконання цієї команди як фонового процесу. Якщо ні, то чому, ні?
Я хочу розповсюджувати кращі практики у своїй компанії, але мені потрібно вміти демонструвати та створювати резервні копії будь-яких рекомендацій, які я даю.
Я також хочу зрозуміти, що саме відбувається.
chroot --userspec root:root / sh -c "exec some_forever_process" &
. Робота працює як той самий користувач, без явногоnohup
до абоdisown
пізніше. Отже, у цьому випадку, як це сигнал не може бути переданий під час виходу?