Кроме твоих команд, на машине всё время работают другие программы: их запустили без тебя. В этом шаге — кто их запускает и чем программа отличается от процесса.
Программа — файл на диске: uname, например, лежит в /usr/bin/uname. Пока её не запустили, она ничего не делает. Запущенная программа — процесс: у него есть номер, своя память и время работы. Одна программа может работать в нескольких процессах сразу.
Процесс uname живёт доли секунды: напечатал выпуск ядра и завершился. Оболочка — тоже процесс, и он работает, пока открыт терминал. Процессы своего терминала показывает ps:
В списке будет оболочка bash и сам ps: пока он печатал список, он тоже работал.
Остальные процессы запустились при загрузке машины, без тебя. Многие из них — службы: программы, которые работают в фоне и ждут работы, например запросов к сайту. Службами управляет systemd: запускает их при загрузке, перезапускает после сбоя, останавливает по команде. Терминал службе не нужен.
nginx — веб-сервер этой машины. Вывод active значит, что служба работает.
systemctl is-active nginx напечатал active. Ты закрываешь вкладку с терминалом. Что будет с сайтом?
-
Вход в систему службу не трогает: systemd запустил её при загрузке машины, и она работает, вошёл ты или нет. После входа
systemctl is-active nginxпечатаетactiveсразу. -
nginx запустил systemd при загрузке, терминал к этому не причастен. Открой терминал снова —
systemctl is-active nginxнапечатаетactive. -
Службу запускает systemd, твоя оболочка её не запускала. С оболочкой завершаются программы, которые ещё работают в этом терминале.
Службу nginx запустил systemd при загрузке, и терминал ей не нужен: сайт работает, даже когда никто не вошёл. Остановить её могут команда systemd или сбой — проверяют это той же systemctl is-active nginx.
Главное в шаге
- Программа — файл на диске, процесс — её запущенный экземпляр со своим номером.
- Служба работает в фоне без терминала, запускает и останавливает её systemd.