추가 읽기

추가 읽기

~에서운영 체제가 종료되면 서비스 관리자는 SIGTERM 및 SIGKILL을 해당 서비스에 보내야 한다는 것을 어떻게 알 수 있습니까?

systemd는 초기화 관리자이자 서비스 관리자입니다.

"초기화"와 "서비스 관리자"의 차이점은 무엇입니까?

내 생각엔 둘 다 똑같은 것 같은데?

"서비스 관리자" 대신 "init"의 예가 있습니까? 그 반대?

감사해요.

답변1

init프로세스 #1에서 실행되는 프로그램의 일반적인 이름입니다. 이는 수년에 걸쳐 다양한 형태를 취해 왔으며 init프로젝트에서 수행하는 작업은 매우 다양합니다. 혼란스럽게도 이는 관리자가 프로세스 #1과 통신하기 위해 사용하는 명령의 이름이기도 합니다. 그것들은 두 가지 별개의 것으로 가장 잘 볼 수 있으며 AT&T Unix에서는 확실히 그런 식으로 문서화되어 있습니다. 비록 일부 소프트웨어에서는 발견된 프로세스 ID에 따라 다른 동작을 갖는 프로그램에서 모두 함께 혼합되어 있지만 말입니다. 상황을 더욱 혼란스럽게 만들기 위해 프로세스 #1은 시스템 수명 동안 여러 다른 프로그램을 실행할 수 있으며 그 중 최소 두 개(initramfs가 있는 Linux 시스템의 경우)는 initramfs 및 최종적으로 루트 파일 시스템에서 이름이 init지정 /init됩니다 /sbin/init. , 일반적으로 전자로 연결됨).

서비스 매니저이름에서 알 수 있듯이 서비스를 관리하는 프로그램입니다. 실제로 수년에 걸쳐 광범위한 운영 체제 소프트웨어에서 프로세스 #1로 실행될 필요는 없습니다.일반적으로 그렇지 않음프로세스 #1. 서비스 관리자에는 Gerrit Pape가 포함됩니다.runsv로랑 벨코트(Laurent Belcote)s6-supervise상상 속의 이름까지service-manager내 간식에. 또한 AT&T Unix System 5 Release 4용 서비스 액세스 도구, IBM AIX 3.1용 시스템 리소스 컨트롤러, Solaris용 서비스 관리 도구도 포함되어 있습니다. 이는 통합되고 일관되며 알려진 컨텍스트에서 서비스 프로그램을 생성하고 이러한 서비스를 제어(시작, 종료, 다시 시작 및 취소)하고 나머지 시스템이 상태를 쿼리할 수 있는 메커니즘을 제공합니다.

시스템 관리자시스템을 관리하고 시스템 상태의 변화를 처리하는 프로그램입니다. 그것은 일반적이다프로세스 #1로 실행합니다. 이는 부분적으로 운영 체제의 커널이 이를 특별히 처리하여 정전 이벤트 또는 커널 가상 터미널 키보드 장치의 특수 키 코드(예: Linux + 또는 + + 생성 프로세스 에서 생성된 키 코드)와 같은 시스템 상태 변경 요청에 대한 정보를 보내기 때문입니다. #1). 또한 부팅 시 초기 시스템 상태를 설정하고 때로는 종료 시 시스템 상태를 마무리하는 역할도 담당합니다.SIGWINCHSIGINT

시스템 상태 세부 정보는 소프트웨어에 따라 다릅니다. van Smoorenburg는 init(현재는 사용되지 않는) 런레벨 측면에서 작동합니다. BSD init의 상태 머신은 완전히 내부적이며 다음과 같은 상태를 갖습니다:달리기/etc/rc,다중 사용자, 그리고단일 사용자.

예시 연구:

  • systemd프로세스 #1 프로그램입니다. 하나의 프로그램에서 서비스 관리와 시스템 관리를 수행하고 해당 프로세스로 실행됩니다. 그러나 시스템 상태 마무리를 처리하지 않고 대신 프로세스 #1을systemd-shutdown그런 이유로. 시스템 상태 변경은 일반적으로 서비스 관리자 시작/중지의 형태를 취합니다.표적이로 인해 시작/중지가 발생합니다.제공하다. emergency.service예를 들어, 일부 서비스는 systemd-halt.service활성화되면 자체적으로 실행되어 systemctl추가 시스템 상태 변경을 위해 프로세스 #1로 다시 명령을 보냅니다. 이 설계에서 종료는 두 가지 상태 시퀀스입니다.
  • 상상 속의 이름system-manager내 Nosh Tooset에는 시스템 관리자 역할만 수행하는 프로세스 #1 프로그램이 있습니다. 부팅 시 초기화되고 종료 시 완료됩니다. (시스템 전체) 서비스 관리자를 생성하여 시스템을 관리합니다.또 다른 과정으로그리고 다양한 통화system-control이벤트에 응답하는 프로그램. (예를 들어 KVT 키보드의 ++ 코드를 SIGINT사용하면 실행할 하위 프로세스가 생성됩니다.) 서비스 관리자에게 명령을 실행하여 서비스와 대상을 시작하고 중지합니다. 마찬가지로 여러 서비스/대상 호출은 명령을 다시 보냅니다.system-control start secure-attention-keysystem-controlsystem-control체계관리자는 활성화될 때 추가 시스템 상태 변경을 요청할 수 있습니다. 서비스 프로세스는 프로세스 #1의 손자입니다.
  • runit시스템 관리만 수행하는 프로세스 #1 프로그램입니다. 다른 프로세스와 마찬가지로 서비스 관리자를 생성합니다. 이는 쉘 스크립트를 호출하여 수행됩니다. runit 사람들은 이를 "2단계"라고 부르며 체인에 로드됩니다.runsvdir이는 차례로 runsv프로세스 #1의 손자로 여러 프로그램을 생성합니다. 서비스 프로세스는 프로세스 #1의 증손자입니다. 시스템 관리는 신호와 플래그 파일의 조합에 의해 트리거되는 "3개의 쉘 스크립트만 실행"하는 접근 방식을 사용합니다.
  • 시스템 5 init는 시스템 관리만 수행하는 프로세스 #1 프로그램입니다. 앞서 언급한 시스템 상태 런레벨을 가지며 이론적으로는 서비스 관리자일 수도 있습니다. 실제로 서비스 관리 기능이 너무 열악하여 몇 년이 지나면 더 이상 TUI 로그인 서비스 관리에도 사용되지 않습니다. 이는 이전에 언급한 SAF 및 SRC 형태의 하위 프로세스로 (더 강력한) 서비스 관리자를 생성합니다.

    1990년에는 사용 중인 런레벨 수가 1로 줄어들어 system-manager수십 년 후 실제로 nosh와 거의 동일한 디자인이 탄생했습니다. 프로세스 #1은 주로 서비스 관리자 하위 프로세스를 생성하고 커널 이벤트에 응답하여 명령을 실행하기 위한 더 많은 하위 프로세스를 생성했습니다. 관리자 명령. 서비스 프로세스는 프로세스 #1의 증손자이자 다양한 서비스 관리자 프로세스의 손자이자 자식 프로세스입니다. (TUI 로그인 서비스 프로세스는 예를 들어 프로세스 #1에서 생성 ttymon된 프로세스에서 생성됩니다 sac.)

  • van Smoorenburg는 앞서 언급한 System 3 및 System 5가 출시되기 몇 년 전의 Unix 서비스 관리자와 같습니다 init. 이는 시스템 관리자 역할을 수행하고 일부 서비스도 관리하는 프로세스 #1 프로그램입니다(비록 기능이 덜한 방식이지만 시스템 5와 같은 개별 서비스 시작/중지를 세밀하게 제어할 수는 없음). 서비스 관리는 실제로 수행되는 경우(서비스 프로그램을 포크하고 대부분 잊어버리는 것이 아니라) 하위 프로세스의 다른 프로그램에서 수행됩니다.initinitinit

    systemdNosh 도구 세트와 달리 system-manager일부 시스템 관리 작업은 하위 프로세스에서 실행되는 프로그램에 맡겨집니다. 둘 다 프로세스 #1 systemd에서 시스템 전원 끄기/다시 시작/중지(커널에 대한 적절한 시스템 호출 수행)의 최종 작업을 수행하는 동안 system-manager(다른 프로그램에서 systemd의 경우에도 불구하고) van Smoorenburg 시스템에서는 이러한 작업을 수행합니다. 호출하여 하위 프로세스에서 수행됩니다 rc. 예를 들어, 시스템을 중지하기 위한 최종 시스템 호출은 halt하위 프로세스 rc(프로세스 #1의 하위 프로세스)로 실행되는 쉘 스크립트에 의해 수행됩니다.halt프로그램을 순차적으로 실행(프로세스 #1의 증손자로서) 실제로 시스템 호출을 수행합니다.

추가 읽기

답변2

이것은 매우 좋은 질문이지만 빨리 대답할 수 있는 질문은 아닙니다. 내 대답은 '그렇다'이다제이드 BP의.

"초기 시스템"에 대해 이야기할 때 실제로는 4가지 다른 사항에 대해 이야기하고 있습니다. 아래를 참조하세요. 실제로 관련된 개념을 구별하는 데 시간을 들이는 사람은 거의 없기 때문에 이는 혼란스러운 영역입니다. 때로는 용어에 동의하지 않는 사람도 있습니다. :-)

예를 들어, 조나단이 전화를 겁니다.서비스 매니저, 내가 전화하는 것공정 감독 시스템, 서비스가 아닌 프로세스를 관리하기 때문입니다. 보다 정확하게는 추상화("서비스")를 제공합니다.장거리 달리기서비스, ​​즉 데몬을 통해 구현된 서비스) 사용자가 해결할 수 있도록 해당 추상화(프로세스)의 구현을 숨깁니다.제공하다바꾸다프로세스.

조나단이 부릅니다시스템 관리자, 내가 전화하는 것서비스 매니저, 실제로는 서비스를 시작하고 중지하는 도구이므로 서비스를 관리할 수도 있지만 시스템의 전역 상태를 처리하는 도구이므로 "시스템 관리자"라는 용어도 의미가 있습니다. 차라리머신 상태 관리자. 그럼에도 불구하고 우리는 이러한 용어에 동의해야 하며, 이는 혼란을 줄이는 데 큰 도움이 될 것입니다.

그렇다면 초기화 시스템은 무엇입니까? 실제로는 4가지입니다.

  • 컴퓨터가 시작될 때 실행되는 첫 번째 프로그램입니다. 전통적으로 이름은 으로 지정되었으며 /sbin/init이것이 제가 이 프로그램을 다룰 때 사용하는 용어입니다.
  • 실행하는데 오랜 시간이 걸리는 프로그램프로세스 번호 1대부분의 기계 수명 동안. 다른 프로그램에서 실행될 수 있기 /sbin/init때문에 같을 수도 있고 다를 수도 있습니다 . /sbin/initsysvinit 또는 systemd의 경우,프로세스 번호 1/sbin/init. s6 기반 시스템에는 해당되지 않습니다.
  • 공정 감독 시스템. 이것은 기본적으로 데몬이 죽을 때 다시 시작하기 위한 시스템이며, pid가 무엇이든 상관없이 데몬의 현재 화신을 해결하는 도구입니다. 초기화 시스템의 경우 최소한 하나의 프로세스에 이 속성이 있어야 합니다. 그렇지 않은 경우 시스템의 모든 프로세스(저장)프로세스 번호 1)이 종료되어 머신을 사용할 수 없게 되고 콘솔에서 재부팅해야 합니다.
  • 머신 상태 관리자(모호한 용어를 피하기 위해). 소프트웨어는 컴퓨터의 상태를 "모든 것이 다운됨"에서 "내가 원하는 모든 서비스가 작동 중"으로 변경할 수 있으며 컴퓨터가 실행되는 동안 실행 중인 서비스 세트를 변경하고 종료를 트리거할 수도 있습니다.

이는 init 시스템의 4가지 중요한 부분입니다. 그렇다면 기존 초기화 시스템은 어떻게 작동하나요?

  • sysvinit은 /sbin/init,프로세스 번호 1, 아주 초보적인감독 시스템(의 라인을 통해 구현됨 /etc/inittab),머신 상태 관리자. sysvinit를 사용하는 배포판은 일반적으로 sysv-rc(기존 쉘 스크립트 세트) 또는 OpenRC를 다음과 같이 사용합니다.머신 상태 관리자.
  • 오픈RC는머신 상태 관리자. 최신 버전은 기본 기능도 제공합니다.감독 시스템. 하지만 제공하지 /sbin/init않거나프로세스 번호 1: OpenRC 자체는 초기화 시스템이 아닙니다.
  • systemd는 단일 프로세스에서 4가지 요소를 모두 제공합니다. 그렇습니다. systemd는 둘 다 "init"입니다( /sbin/init둘 중 하나를 의미할 수 있음).프로세스 번호 1아니면 둘다)그리고"서비스 관리자"는 "서비스 관리자"를 의미합니까?감독 시스템또는머신 상태 관리자.
  • 모든 daemontools와 유사한 메소드는 기본적으로감독 시스템.달리다또한 /sbin/init프로세스 번호 1.s6제공프로세스 번호 1, 하지만 아니 /sbin/init, 하지만s6-리눅스-초기화패키지는 다음 /sbin/init방법을 제공하지 않습니다.머신 상태 관리자, 그러나 s6은 그러한 관리자를 위한 후크를 제공하며 두 가지가 작성되었습니다.s6-rc그리고아노파.
  • 간식4가지 요소를 모두 별도의 프로세스로 제공합니다. 조나단은 나보다 그것에 대해 더 잘 이야기할 수 있을 것이다. :-)
  • 다른 init 시스템(busybox init, BSD init, launchd, Epoch 등)을 볼 때 다음과 같이 생각하는 것이 좋습니다. 이 init는 어떤 요소를 제공합니까? 무엇이 빠졌나요?

이 기사에서 간략하게만 요약할 수 있는 내용을 설명하는 15분짜리 비디오와 init 시스템 작동 방식에 대해 자세히 설명하는 더 큰 슬라이드 세트가 있습니다. 이 모든 내용은 다음에서 찾을 수 있습니다.FOSDEM 2017 아카이브. 자유롭게 탐색해 보세요. 당신이 이런 것들에 관심이 있다면, 우리는메일링 리스트 모니터링.

즐기다,

답변3

init(보통) 시스템에 의해 시작된 첫 번째 프로세스입니다. 다음을 포함하되 이에 국한되지 않는 몇 가지 특별한 책임이 있습니다.

  • 부팅 프로세스를 완료하는 데 필요한 다른 사용자 공간 프로세스를 시작합니다.
  • 시스템의 최종 종료를 처리합니다( init사용자 공간의 모든 항목이 종료되면 결국 커널에 전원을 끄거나 재부팅하라는 메시지가 표시됩니다).
  • 고아 프로세스(더 이상 실행 중인 상위 프로세스가 없는 프로세스)를 가져와서 정리합니다.

반면에 서비스 관리자는 주어진 서비스 집합이 실행되고 있는지 확인하고 선택적으로 서비스가 계속 실행되는지 확인하는 역할만 담당합니다. 이를 달성하는 정확한 방법은 단순히 서비스 간의 종속성을 추적하는 기본 스크립트부터 종속성을 자동으로 관리하는 복잡한 시스템까지 다양할 수 있습니다.

원래 SVR4 구현(클래식 패키지, Busybox 애플릿, 대부분의 Linux 배포판의 BSD 및 Solaris 프로그램의 기반 init)에는 실제로 기본 서비스 관리가 포함되었습니다. 시작 시 자동으로 시작되고 종료 시 다시 시작되는 프로그램을 정의할 수 있습니다. 따라서 기본 서비스 관리자가 아닌 UNIX 계열 시스템에서 구현을 찾는 것은 실제로 어렵고 이러한 기본 수준의 서비스 관리는 주로 프로세스 노력의 일부를 의미합니다.systemv-initinitinitinitinit

반면에 구현이 아닌 서비스 관리자를 쉽게 가질 수 있습니다 init. 클래식 BSD 스크립트는 rc.dLinux 개념의 기초를 형성하는 매우 간단한 서비스 관리자(서비스 시작 및 중지를 처리하고 기본 종속성 관리 제공)의 예입니다 . /etc/init.d보다 정교한 예는 상태 추적, 자동 재시작 기능, 경고 및 일부 시스템 모니터링 지원을 기본 기능에 추가하는 monit입니다.

관련 정보