Из моего вопроса стало ясно, что я не могу легко определить функции демона. Я читал в разных статьях и на разных форумах, что эту service --status-all
команду можно использовать для вывода списка всех демонов в моей системе. Но я не думаю, что команда перечисляет все демоны, потому NetworkManager
что демон, который в данный момент работает в моей Ubuntu 14.04
системе, не указан командой. Есть ли какая-нибудь команда для вывода списка запущенных демонов, или есть какой-то способ найти демонов из самого filesystem
себя?
32
network-manager
неNetworkManager
.anacron
что упоминается как не демон в своем скрипте инициализации.anacron
потому что было сказано,/etc/init.d/anacron
что это не демон. Моя цель - написатьC++
программу для перечисления всех демонов, работающих в моей системе. Для этого мне нужно знать, какие файлы анализировать, чтобы получить детали.service --status-all
это то , что вам нужно. Ubuntu, похоже, относится к NetworkManager по-другому. Я получаю обаnetworking
иnetwork-manager
в выводеservices --status-all
на Debian, но толькоnetworking
на Ubuntu. Я думаю, вам нужно определить, что именно вы подразумеваете под "демоном".Ответы:
Понятие демона привязано к процессам , а не к файлам . По этой причине нет смысла «находить демонов в файловой системе». Просто, чтобы сделать понятие немного яснее: программа представляет собой исполняемый файл (видимый в выводе
ls
); процесс - это экземпляр этой программы (видимый в выходных данныхps
).Теперь, если мы используем информацию, которую я дал в своем ответе , мы могли бы найти работающих демонов, ища процессы, которые выполняются без присоединенного к ним управляющего терминала . Это можно сделать довольно легко с помощью
ps
:Поле
tty
вывода содержит «?» когда процесс не имеет управляющего терминала.Большая проблема возникает тогда, когда ваша система работает в графической среде. Поскольку программы с графическим интерфейсом (например, Chromium) не подключены к терминалу, они также появляются в выходных данных. В стандартной системе, где root не запускает графические программы, вы можете просто ограничить предыдущий список процессами root. Это может быть достигнуто с помощью
ps
"-U
переключателя.Тем не менее, здесь возникают две проблемы:
По сути, мы хотели бы отобразить все программы без управляющего терминала, но не программы с графическим интерфейсом . К счастью для нас, есть программа для отображения процессов графического интерфейса
xlsclients
:! Этот ответ от slm говорит нам, как использовать его для вывода списка всех программ с графическим интерфейсом, но нам придется изменить его, так как мы хотим исключить их. Это можно сделать с помощью--deselect
переключателя.Сначала мы составим список всех программ с графическим интерфейсом, для которых у нас запущены процессы. Из ответа, который я только что связал, это делается с помощью ...
Теперь
ps
есть-C
переключатель, который позволяет нам выбирать по имени команды. Мы только что получили наш список команд, поэтому давайте добавим его вps
командную строку. Обратите внимание, что я использую--deselect
впоследствии, чтобы отменить мой выбор.Теперь у нас есть список всех процессов без графического интерфейса. Давайте не будем забывать наше правило "нет связи с TTY". Для этого я добавлю
-o tty,args
к предыдущей строке, чтобы вывестиtty
каждый процесс (и его полную командную строку):Финал
grep
захватывает все строки, которые начинаются с «?», То есть все процессы без контролируемого tty. И вот, пожалуйста! Эта последняя строка дает вам все не-GUI процессы, запущенные без управляющего терминала. Обратите внимание, что вы все еще можете улучшить его, например, исключив потоки ядра (которые не являются процессами) ...... или добавив несколько столбцов информации для чтения:
источник
Я написал для "старого" sysv initd, вы должны проверить, работает ли он на вашем дистрибутиве.
Хорошие демоны хорошо написали сценарии запуска в / etc / initd
При изменении уровня выполнения откуда init знает работающие демоны?
Он ищет их имена в каталоге
Так что вы можете
Чтобы просмотреть все процессы: перечислите каждый подкаталог в
Если его имя состоит из цифр, это pid запущенного процесса.
Например, статус процесса с pid 1234 - это файл
Откройте его и получите первую строку, начинающуюся с «Имя:»
Видеть
(извините за неприятное форматирование, я пишу с моего мобильного телефона ...)
источник