Как проверить, является ли процесс демоном или нет?

Можно поместить в черный список модуль ядра Bluetooth:

echo bluetooth >> /etc/modprobe.d/blacklist.conf

Это должно отключить устройство от того, чтобы быть инициализированным.


До -bt 0. Я смог погуглить его с, отключают Bluetooth "купленный 0". Первый результат предполагает, что это был флаг, переданный hal отключить Bluetooth. К сожалению, hal обесценивается так, этот метод больше не будет работать.

7
08.10.2014, 07:52
2 ответа

Что-нибудь с PPID равным 1, по большей части, скорее всего, демон. Но могут возникнуть ситуации, когда процессы могут стать потомками 1, которые технически не являются демонами. Итак, методы, которые я обсуждаю ниже, предназначены для демонстрации того, как вы будете определять, принадлежит ли PID 1, не обязательно, что это настоящий демон.

Например

$ ps -xj
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
 8420  1211  1211  8420 pts/4     1211 S+    1000   0:01 ssh dufresne
    1  2276  2275  2275 ?           -1 Sl    1000   0:48 /usr/bin/gnome-keyring-daemon --daemonize --login
 2196  2278  2278  2278 ?           -1 Ssl   1000   0:39 gnome-session
    1  2288  2278  2278 ?           -1 S     1000   0:00 dbus-launch --sh-syntax --exit-with-session
    1  2289  2289  2289 ?           -1 Ssl   1000   6:00 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
    1  2358  2289  2289 ?           -1 Sl    1000   0:01 /usr/libexec/gvfsd

Отрывок из Википедии также может пролить свет на некоторые вещи, но он также оставляет немного неясным, как на самом деле определить, является ли процесс демоном или нет.

отрывок из Википедии

В среде Unix родительский процесс демона часто, но не всегда, является процессом инициализации. Демон обычно создается либо процессом , порождающим дочерний процесс, а затем немедленно завершающимся, таким образом заставляя init принять дочерний процесс, либо процессом init , непосредственно запускающим демон. Кроме того, демон, запускаемый посредством разветвления и выхода, обычно должен выполнять другие операции, такие как разъединение процесса от любого управляющего терминала (tty). Такие процедуры часто реализуются в различных вспомогательных подпрограммах, таких как daemon (3) в Unix.

ПРИМЕЧАНИЕ: в системах, которые используют SystemD (дистрибутивы Red Hat, такие как Fedora), обычно нет процесса init , но вместо этого:

$ ps -j -1
  PID  PGID   SID TTY      STAT   TIME COMMAND
    1     1     1 ?        Ss     0:42 /usr/lib/systemd/systemd --switched-root --system --deserialize 20

Это процесс с PID 1.

В системе Debian / Ubuntu у них будет процесс с именем init :

$ ps -j -1
  PID  PGID   SID TTY      STAT   TIME COMMAND
    1     1     1 ?        Ss     0:02 /sbin/init

Так что же за демон?

И вот почему бывает сложно определить, является ли что-то демоном или нет, если его PPID равен 1:

Процесс может стать дочерним по отношению к процессу init ( ПРИМЕЧАНИЕ: , что процесс init имеет PID 1), когда его родительский элемент убит или отвергает их, эти процессы не обязательно являются демонами, но все равно будут отображаться как имеющие PPID равный 1 .

Итак, чтобы определить, является ли что-то демон или нет, вероятно, потребуется серия тестов, а не просто проверка того, равен ли PPID 1.

Так что же нам тогда остается?

Чтобы определить если что-то является демоном, вам, вероятно, придется прибегнуть к различным тестам, например:

  • PPID 1?
  • Подключен ли TTY?
  • Это служба? sudo service ... ?
  • Управляется ли он Systemd, Upstart или SysV?
  • Он прослушивает порт?
  • Он записывает в файл журнала? Системный журнал?

Итак, нам приходится прибегать к «утиной печати», если он крякает и плывет, скорее всего, утка, но даже указанные выше характеристики могут вас обмануть.

Ссылки

10
27.01.2020, 20:15

Нет способа различить регулярный процесс из процесса демона. Демон может быть запущен из любого места, а не просто init. Нет необходимости удвоить вилку и отсоединить от терминала, который будет считаться демоном.

На системах GNOME, Daememon настроек GNOME - это его родитель, входит в систему, входит в систему к терминалу родителей и не имеет PID1, как его родительский PID, но он все еще считается демоном.

Демон просто непрерывно работает. Поэтому они, следовательно, невозможно определить с одной командой.

Теперь, если то, что вы хотите, состоит в том, чтобы узнать, работает ли ваш конкретный демон, то возьмите гандурь на команде PGREP .

Кроме того, измените имя своего демона, уже есть команда, называемая демоном, с которой вы можете в конечном итоге конфликтуйте.

6
27.01.2020, 20:15

Теги

Похожие вопросы