RHCSA 시리즈 : RHEL 7의 프로세스 관리 : 부팅, 종료 및 그 사이의 모든 것 – 5 부
이 기사에서는 명령 줄 인터페이스에 로그인 화면이 표시 될 때까지 전원 버튼을 눌러 RHEL 7 서버를 켠 이후 발생하는 일에 대한 전체적이고 간단한 개정판을 시작합니다.

점에 유의하시기 바랍니다:
1. 동일한 기본 원칙이 약간의 수정을 거쳐 다른 Linux 배포판에도 적용됩니다.
\n2. 다음 설명은 부팅 프로세스에 대한 전체적인 설명이 아니라 기본 사항에 불과합니다.
Linux 부팅 프로세스
1. POST (Power On Self Test)가 초기화되고 하드웨어 검사를 수행합니다.
2. POST가 완료되면 시스템 제어가 하드 디스크 (BIOS 및 MBR을 사용하는 이전 시스템의 경우) 또는 전용 (U) EFI 중 하나의 부트 섹터에 저장되는 첫 번째 단계 부트 로더로 전달됩니다. 분할.
3. 그런 다음 첫 번째 단계 부트 로더는 두 번째 단계 부트 로더, 가장 일반적으로 GRUB (GRand Unified Boot Loader)를로드합니다.이 부트 로더는/boot 내부에 있으며, 차례로 커널과 초기 RAM 기반 파일 시스템 (initramfs라고도 함)을로드합니다. , 여기에는 궁극적으로 실제 루트 파일 시스템을 마운트하는 데 필요한 작업을 수행하는 프로그램 및 바이너리 파일이 포함되어 있습니다.
4. 부팅 할 운영 체제와 커널을 선택할 수있는 스플래시 화면이 표시됩니다.

5. 커널은 시스템에 연결된 하드웨어를 설정하고 루트 파일 시스템이 마운트되면 PID 1로 프로세스를 시작합니다. 그러면 다른 프로세스가 초기화되고 로그인 프롬프트가 표시됩니다.
참고 : 나중에 그렇게하려면 dmesg 명령을 사용하고이 시리즈의 이전 기사에서 설명한 도구를 사용하여 출력을 필터링하여이 프로세스의 세부 사항을 검토 할 수 있습니다.

위의 예에서 우리는 잘 알려진 ps 명령을 사용하여 상위 프로세스 (또는이를 시작하는 프로세스)가 systemd (대부분의 최신 Linux 배포판이 전환 된 시스템 및 서비스 관리자) 인 현재 프로세스 목록을 표시했습니다. "to) 시스템 시작 중 :
# ps -o ppid,pid,uname,comm --ppid=1
-o 플래그 (-format의 약자)를 사용하면 man ps의 STANDARD FORMAT SPECIFIERS 섹션에 지정된 키워드를 사용하여 필요에 맞게 사용자 정의 된 형식으로 ps의 출력을 표시 할 수 있습니다.
기본값을 사용하는 대신 ps의 출력을 정의하려는 또 다른 경우는 상당한 CPU 및/또는 메모리로드를 유발하는 프로세스를 찾아 그에 따라 정렬해야하는 경우입니다.
# ps aux --sort=+pcpu # Sort by %CPU (ascending) # ps aux --sort=-pcpu # Sort by %CPU (descending) # ps aux --sort=+pmem # Sort by %MEM (ascending) # ps aux --sort=-pmem # Sort by %MEM (descending) # ps aux --sort=+pcpu,-pmem # Combine sort by %CPU (ascending) and %MEM (descending)

SystemD 소개
Linux 세계에서 주요 Linux 배포판에 의해 systemd를 채택하는 것보다 더 많은 논쟁을 불러 일으키는 결정은 거의 없습니다. Systemd의 지지자들은 다음과 같은 사실을 주요 이점으로 지정합니다.
또한 읽어보기 : 'init'및 'systemd'의 비하인드 스토리
1. Systemd를 사용하면 시스템 시작 중에 더 많은 처리를 병렬로 수행 할 수 있습니다 (프로세스를 하나씩 시작하기 때문에 항상 느린 경향이있는 이전 SysVinit와는 대조적으로, 하나가 다른 프로세스에 종속되어 있는지 확인한 다음 데몬이 실행될 때까지 기다립니다). 더 많은 서비스를 시작할 수 있음) 및
2. 실행중인 시스템에서 동적 리소스 관리로 작동합니다. 따라서 서비스는 부팅 중에 유효한 이유없이 시작되는 대신 필요할 때 (사용되지 않는 경우 시스템 리소스를 사용하지 않도록) 시작됩니다.
3. SysVinit 스크립트와의 역 호환성.
Systemd는 systemctl 유틸리티에 의해 제어됩니다. SysVinit 배경에서 온 경우 다음 사항에 익숙 할 가능성이 있습니다.
- the service tool, which -in those older systems- was used to manage SysVinit scripts, and
- the chkconfig utility, which served the purpose of updating and querying runlevel information for system services.
- shutdown, which you must have used several times to either restart or halt a running system.
다음 표는 이러한 레거시 도구와 systemctl 사용 간의 유사점을 보여줍니다.
Systemd는 또한 장치 (서비스, 마운트 지점, 장치 또는 네트워크 소켓이 될 수 있음) 및 대상 (systemd가 여러 관련 프로세스를 동시에 시작하도록 관리하는 방법을 고려할 수있는 방법)의 개념을 도입했습니다. SysVinit 기반 시스템의 런레벨과 동일하지는 않습니다.
합산
프로세스 관리와 관련된 다른 작업에는 다음 기능이 포함되지만 이에 국한되지는 않습니다.
이는 하나 이상의 실행중인 프로세스의 스케줄링 우선 순위를 변경하는 renice 유틸리티를 통해 수행됩니다. 간단히 말해서 스케줄링 우선 순위는 커널 (버전 => 2.6에 있음)이 주어진 프로세스의 할당 된 실행 우선 순위 (일명 -20에서 19까지의 범위)에 따라 시스템 리소스를 할당 할 수있는 기능입니다.
renice의 기본 구문은 다음과 같습니다.
# renice [-n] priority [-gpu] identifier
위의 일반 명령에서 첫 번째 인수는 사용할 우선 순위 값이고 다른 인수는 프로세스 ID (기본 설정), 프로세스 그룹 ID, 사용자 ID 또는 사용자 이름으로 해석 될 수 있습니다. 일반 사용자 (루트 제외)는 자신이 소유 한 프로세스의 예약 우선 순위 만 수정할 수 있으며, 니스 수준 만 높일 수 있습니다 (즉, 시스템 리소스를 적게 차지함을 의미 함).

보다 정확한 용어로, 프로세스를 종료하면 kill 또는 pkill 명령을 통해 실행을 정상적으로 (SIGTERM = 15) 또는 즉시 (SIGKILL = 9) 완료하라는 신호를 보낼 수 있습니다.
이 두 도구의 차이점은 전자는 특정 프로세스 또는 프로세스 그룹을 완전히 종료하는 데 사용되는 반면 후자는 이름 및 기타 속성을 기반으로 동일한 작업을 수행 할 수 있다는 것입니다.
또한 pkill은 pgrep과 함께 제공되며, 이는 pkill을 사용해야 영향을받을 PID를 보여줍니다. 예를 들어, 실행하기 전에 :
# pkill -u gacanepa
gacanepa가 소유 한 PID를 한 눈에 보는 것이 유용 할 수 있습니다.
# pgrep -l -u gacanepa

기본적으로 kill과 pkill은 모두 SIGTERM 신호를 프로세스에 보냅니다. 위에서 언급했듯이이 신호는 무시 될 수 있습니다 (프로세스가 실행을 완료하는 동안 또는 좋은 경우). 따라서 유효한 이유로 실행중인 프로세스를 심각하게 중지해야하는 경우 명령 줄에 SIGKILL 신호를 지정해야합니다.
# kill -9 identifier # Kill a process or a process group # kill -s SIGNAL identifier # Idem # pkill -s SIGNAL identifier # Kill a process by name or other attributes
결론
이 기사에서는 RHEL 7 시스템에서 부팅 프로세스의 기본 사항을 설명하고 공통 유틸리티 및 systemd 특정 명령을 사용하여 프로세스를 관리하는 데 도움이되는 몇 가지 도구를 분석했습니다.
이 목록은이 주제의 모든 종소리와 휘파람을 다루기위한 것이 아니므로 아래 주석 양식을 사용하여이 기사에 선호하는 도구와 명령을 자유롭게 추가하십시오. 질문 및 기타 의견도 환영합니다.