프로세스가 데몬인지 확인하는 방법은 무엇입니까?

프로세스가 데몬인지 확인하는 방법은 무엇입니까?

나는 부팅 시 시작하여 로그 파일에 기록하는 것과 같은 모든 작업을 완벽하게 수행하는 작은 데몬을 작성했습니다. 하지만 프로세스가 데몬인지 어떻게 확인할 수 있는지 알고 싶습니다. 교수님이 나에게 명령 ps -xj | grep daemon(내 파일 이름은 daemon)을 말씀하셨는데, 원하지 않는 정보가 표시되기 때문에 잘 모르겠습니다. 관련 쉘 명령이 있습니까?

편집: Ubuntu 14.04 LTS를 사용하고 있습니다.

답변1

대부분의 경우 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

Wikipedia에서 발췌한 내용도 사물에 대해 어느 정도 밝힐 수 있지만 프로세스가 데몬인지 실제로 결정하는 방법에 대해서는 약간 모호합니다.

위키피디아에서 발췌

Unix 환경에서 데몬의 상위 프로세스는 일반적으로 init 프로세스이지만 항상 그런 것은 아닙니다. 데몬은 일반적으로 프로세스에 의해 생성된 하위 프로세스이며 즉시 종료되어 init가 하위 프로세스를 채택하게 하거나 데몬 프로세스가 init 프로세스에 의해 직접 시작됩니다. 또한 분기 및 종료로 시작된 데몬은 일반적으로 제어 터미널(tty)에서 프로세스를 분리하는 등의 추가 작업을 수행해야 합니다. 이러한 절차는 일반적으로 Unix의 daemon(3)과 같은 다양한 편의 루틴에서 구현됩니다.

노트:SystemD(Fedora와 같은 Red Hat 배포판)를 사용하는 시스템에는 일반적으로 프로세스가 없지만 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로 관리됩니까?
  • 포트에서 수신 대기 중입니까?
  • 로그 파일에 기록됩니까? 시스템 로그?

따라서 우리는 "오리 타이핑"에 의존해야 합니다. 만약 그것이 꽥꽥거리고 헤엄친다면 아마도 오리일 것입니다. 그러나 위의 특성조차도 당신을 속일 수 있습니다.

인용하다

답변2

일반 프로세스와 데몬 프로세스를 구별할 방법이 없습니다. 데몬은 init뿐만 아니라 어디서든 시작할 수 있습니다. 데몬으로 간주되기 위해 터미널에서 두 번 포크하고 분리할 필요가 없습니다.

GNOME 시스템에서 gnome-settings-daemon은 상위 프로세스를 유지하고 상위 프로세스의 터미널에 로그인하며 PID1을 상위 프로세스 PID로 갖지 않지만 여전히 데몬으로 간주됩니다.

데몬은 지속적으로 실행되는 프로세스일 뿐입니다. 따라서 단일 명령으로 식별할 수 없습니다.

이제 특정 데몬이 실행 중인지 알고 싶다면 이 pgrep명령을 확인하세요.

또한 데몬의 이름을 변경하면 이미 daemon이라는 명령이 있어서 그것과 충돌이 발생할 수 있습니다.

관련 정보