Linux에서는 데몬 프로세스를 "elf 프로세스"라고도 합니다. 이는 백그라운드에서 실행되며 어떤 터미널에서도 제어되지 않는 특수 프로세스입니다. 데몬 프로세스는 제어 터미널과 독립적이며 특정 이벤트가 발생할 때 주기적으로 실행합니다.
이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.
데몬 프로세스 정의
데몬이라고도 하는 데몬 프로세스는 백그라운드에서 실행되고 어떤 터미널에서도 제어되지 않으며 특정 시스템 작업을 수행하는 데 사용되는 특수 프로세스입니다. 많은 데몬은 시스템이 부팅될 때 시작되고 시스템이 종료될 때까지 실행됩니다. 다른 것들은 필요할 때만 시작되고 작업이 완료되면 자동으로 종료됩니다.
제어 터미널과 독립적이며 발생하는 특정 이벤트를 주기적으로 실행합니다. 데몬은 매우 유용한 프로세스입니다. 대부분의 Linux 서버는 데몬 프로세스를 사용하여 구현됩니다.
Linux 시스템이 시작되면 많은 시스템 서비스 프로세스가 시작됩니다. 이러한 시스템 서비스 프로세스에는 제어 터미널이 없으며 사용자와 직접 상호 작용할 수 없습니다. 다른 프로세스는 사용자가 로그인하거나 프로그램을 실행할 때 생성되고 작업이 종료되거나 사용자가 로그아웃할 때 종료되지만 시스템 서비스 프로세스(데몬 프로세스)는 사용자의 로그인 및 로그아웃에 영향을 받지 않으며 항상 종료됩니다. 달리기. 이런 종류의 프로세스에는 데몬이라는 이름이 있습니다.
ps axj 명령을 사용하여 시스템의 프로세스를 살펴보겠습니다. 매개변수 a는 현재 사용자의 프로세스뿐만 아니라 다른 모든 사용자의 프로세스도 나열하는 것을 의미합니다. 매개변수 x는 제어 단말기가 있는 프로세스뿐만 아니라 제어 단말기가 없는 모든 프로세스도 나열하는 것을 의미합니다. 작업 제어 관련 정보입니다.
(1) TPGID 열에 -1이 있는 것은 모두 터미널을 제어하지 않는 프로세스, 즉 데몬 프로세스입니다.
(2) COMMAND 열에서 [ ] 안의 이름은 커널 스레드. 이러한 스레드는 커널에서 생성되므로 사용자 공간 코드가 없으므로 일반적으로 k로 시작하는 이름은 커널을 나타내는 데 사용됩니다. init 프로세스에서 udevd는 /dev 디렉토리 장치 파일을 유지 관리하고, acpid는 전원 관리를 담당하며, syslogd는 /var/log 아래의 로그 파일을 유지 관리합니다.
(4) 데몬 프로세스는 일반적으로 데몬을 의미하는 d로 끝나는 이름을 사용합니다.
데몬 프로세스의 특징(1) Linux에서는 각 시스템이 사용자와 통신하는 인터페이스가 터미널이 됩니다. 이 터미널에서 실행되기 시작하는 모든 프로세스는 이 터미널에 연결됩니다.
(2) 제어 터미널이 닫히면 해당 프로세스가 자동으로 닫힙니다. 하지만 데몬 프로세스는 이러한 한계를 극복할 수 있습니다. 터미널 정보에 의해 중단됨), 실행 시 실행되기 시작하고 전체 시스템이 종료될 때까지 종료되지 않습니다(물론 해당 데몬 프로세스를 종료하는 것으로 간주될 수 있습니다). 3) 사용자로 인해 프로세스가 차단되거나 중단 또는 기타 변경으로 인해 영향을 받지 않도록 하려면 이 프로세스를 데몬 프로세스로 전환해야 합니다.
프로세스, 프로세스 그룹, 세션 및 제어 터미널 간의 관계데몬을 생성하려면 이러한 환경 매개변수를 변경해야 하기 때문에 이들 사이의 관계를 이해하는 것이 중요합니다.
프로세스 그룹 : 하나 이상의 프로세스로 구성되며, 프로세스 그룹 번호(GID)는 해당 프로세스에 있는 프로세스 리더의 PID입니다.
세션: 실제로는 세션이라고 합니다. 해당 기간 동안의 모든 프로세스 그룹을 포함합니다. 일반적으로 세션은 사용자가 로그인할 때 시작됩니다. 일반적으로 로그인은 쉘 터미널이므로 쉘 터미널이 첫 번째입니다. 세션은 일반적으로 로그아웃으로 종료됩니다. 프로세스 리더가 아닌 경우에는 setid()를 호출하여 새 세션을 생성할 수 있습니다.
제어 터미널(tty): 일반적으로 쉘 터미널을 의미하며 세션 중에 존재할 수도 있고 존재하지 않을 수도 있습니다.
데몬 프로세스 생성에서 가장 중요한 단계는 setid 함수를 호출하여 새 세션 리더를 생성하는 것입니다. #includepid_t setid(void);//该函数调用成功时返回新创建的Session的id(其实也就是当前进程的id),出错返回-1。
이 함수를 호출하기 전에는 현재 프로세스가 프로세스 그룹의 리더가 될 수 없습니다. 그렇지 않으면 함수가 -1을 반환합니다. 현재 프로세스가 프로세스 그룹의 리더가 아닌지 확인하는 것도 쉽습니다. 먼저 포크한 다음 setid를 호출하면 됩니다. Fork에 의해 생성된 자식 프로세스는 부모 프로세스와 동일한 프로세스 그룹에 속합니다. 프로세스 그룹의 리더는 그룹의 첫 번째 프로세스여야 하므로 자식 프로세스는 그룹의 첫 번째 프로세스가 될 수 없습니다. 자식 프로세스에는 문제가 없습니다.
이 함수를 성공적으로 호출한 결과는 다음과 같습니다.
(1) 새 세션을 만듭니다. 현재 프로세스는 세션 리더이고 현재 프로세스의 ID는 세션 ID입니다.
(2) 새 프로세스 그룹을 만듭니다. 현재 프로세스는 프로세스 그룹의 리더이고 현재 프로세스의 ID는 프로세스 그룹의 ID입니다.
(3) 현재 프로세스에 원래 제어 터미널이 있는 경우; , 이 터미널을 잃고 제어 터미널이 없는 A 프로세스가 됩니다. (소위 제어 터미널 손실은 원래 제어 터미널이 여전히 열려 있고 읽고 쓸 수 있지만 제어 터미널이 아닌 일반적인 열린 파일임을 의미합니다.)
데몬 죽이는 방법
1. 먼저 ps axj | grep 데몬 이름
을 찾아 해당 데몬을 찾은 후 kill -9 데몬 이름
을 사용하세요. code>Kill; ps axj | grep 守护进程名字
,找到相应的守护进程,然后使用kill -9 守护进程名
杀掉;
2.利用ps -ef
命令查找相应的守护进程,再用kill -9
ps -ef
명령을 사용하여 해당 데몬 프로세스를 찾은 다음 kill -9
명령을 사용하여 종료합니다. . Create Shell 스크립트는 프로세스의 시작, 종료 및 다시 시작을 자동으로 관리합니다. 관련 추천: "Linux 비디오 튜토리얼"
위 내용은 리눅스 데몬이 뭐야?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!