이 기사는 전원 버튼을 눌러 RHEL 7 서버를 켜기 시작한 순간부터 명령 줄 인터페이스에서 로그인 화면이 표시될 때까지의 전체적이고 간단한 검토로 시작하겠습니다.

다음 사항을 참고하십시오:
1. 동일한 기본 원칙은 다른 Linux 배포판에도 적용되며 아마도 약간의 수정이 있을 수 있습니다. 그리고
2. 다음 설명은 부팅 프로세스의 철학적인 설명이 아니라 기본 원칙에 대한 설명임을 유의하십시오.
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인 시스템 시작 중에 대부분의 현대적인 리눅스 배포판에서 전환된 시스템 및 서비스 관리자입니다:
# ps -o ppid,pid,uname,comm --ppid=1
-o 플래그(단축형으로 –format)는 ps의 출력을 STANDARD FORMAT SPECIFIERS 섹션에서 지정된 키워드를 사용하여 사용자의 요구에 맞게 사용자 정의 형식으로 표시할 수 있도록 합니다.
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 소개
리눅스 세계에서 몇 가지 결정이 논란을 일으킨 것보다 더 많은 것은 주요 리눅스 배포판에서 systemd의 채택이다. Systemd 지지자들은 다음 사실들을 주요 장점으로 꼽는다:
Read Also: ‘init’과 ‘systemd’ 뒤에 숨겨진 이야기
1. Systemd는 시스템 시작 중에 병렬로 더 많은 처리를 수행할 수 있도록 한다(이전 SysVinit은 프로세스를 하나씩 시작하고, 하나가 다른 하나에 의존하는지 확인한 후 데몬이 시작될 때까지 기다려 더 많은 서비스가 시작되므로 항상 느릴 수 있다), 그리고
2. 실행 중인 시스템에서 동적 리소스 관리로 작동한다. 따라서 서비스는 필요할 때 시작되며(사용되지 않을 경우 시스템 리소스를 소비하지 않도록) 부팅 중에 유효한 이유 없이 시작되지 않는다.
3. SysVinit 스크립트와의 하위 호환성.
Systemd는 systemctl 유틸리티로 제어된다. SysVinit 배경에서 오신 경우, 익숙할 것은 다음과 같다:
- 이전 시스템에서 SysVinit 스크립트를 관리하는 데 사용되었던 service 도구, 그리고
- 시스템 서비스의 실행 레벨 정보를 업데이트하고 쿼리하는 데 사용되었던 chkconfig 유틸리티.
- 종료, 당신이 실행 중인 시스템을 다시 시작하거나 중지하는 데 여러 번 사용했을 것입니다.
다음 표는 이러한 레거시 도구와 systemctl의 사용 사이의 유사성을 보여줍니다:
Legacy tool | Systemctl equivalent | Description |
service name start | systemctl start name | Start name (where name is a service) |
service name stop | systemctl stop name | Stop name |
service name condrestart | systemctl try-restart name | Restarts name (if it’s already running) |
service name restart | systemctl restart name | Restarts name |
service name reload | systemctl reload name | Reloads the configuration for name |
service name status | systemctl status name | Displays the current status of name |
service –status-all | systemctl | Displays the status of all current services |
chkconfig name on | systemctl enable name | Enable name to run on startup as specified in the unit file (the file to which the symlink points). The process of enabling or disabling a service to start automatically on boot consists in adding or removing symbolic links inside the /etc/systemd/system directory. |
chkconfig name off | systemctl disable name | Disables name to run on startup as specified in the unit file (the file to which the symlink points) |
chkconfig –list name | systemctl is-enabled name | Verify whether name (a specific service) is currently enabled |
chkconfig –list | systemctl –type=service | Displays all services and tells whether they are enabled or disabled |
shutdown -h now | systemctl poweroff | Power-off the machine (halt) |
shutdown -r now | systemctl reboot | Reboot the system |
Systemd는 또한 유닛(서비스, 마운트 포인트, 장치 또는 네트워크 소켓이 될 수 있음) 및 타겟(시스템디가 동시에 여러 관련 프로세스를 시작하는 방법으로, SysVinit 기반 시스템에서의 런레벨과 동등하지는 않지만 비슷하게 간주될 수 있음)의 개념을 소개했습니다.
요약하자면
프로세스 관리와 관련된 다른 작업에는 다음이 포함될 수 있지만 이에 한정되지는 않습니다:
1. 프로세스의 시스템 리소스 사용에 따른 실행 우선순위 조정:
이는 하나 이상의 실행 중인 프로세스의 스케줄링 우선순위를 변경하는 renice 유틸리티를 통해 수행됩니다. 간단히 말해, 스케줄링 우선순위는 커널(버전 => 2.6에서 제공됨)이 주어진 프로세스의 할당된 실행 우선순위(범위는 -20부터 19까지인 니스라고도 함)에 따라 시스템 리소스를 할당할 수 있게 하는 기능입니다.
renice의 기본 구문은 다음과 같습니다:
# renice [-n] priority [-gpu] identifier
일반적인 명령어에서 첫 번째 인수는 사용할 우선 순위 값이며, 다른 인수는 프로세스 IDs (기본 설정), 프로세스 그룹 IDs, 사용자 IDs 또는 사용자 이름으로 해석될 수 있습니다. 루트가 아닌 일반 사용자는 소유한 프로세스의 스케줄링 우선 순위만 수정할 수 있으며, 시스템 리소스를 적게 사용하는 방향으로만 우선 순위를 높일 수 있습니다.

2. 필요에 따라 프로세스를 종료(또는 정상 실행 중단):
보다 정확한 용어로, 프로세스를 종료하는 것은 해당 프로세스에게 실행을 완료하도록 신호를 보내는 것을 의미합니다(SIGTERM=15) 또는 즉시 종료(SIGKILL=9)을 kill 또는 pkill 명령어를 통해 수행합니다.
이 두 도구의 차이점은 전자가 특정 프로세스나 프로세스 그룹을 완전히 종료하는 데 사용되는 반면, 후자는 이름 및 기타 속성에 따라 동일한 작업을 수행할 수 있습니다.
또한, pkill은 pgrep와 함께 제공되며, pkill을 사용할 경우 영향을 받을 PID를 보여줍니다. 예를 들어, 실행하기 전에:
# pkill -u gacanepa
한 눈에 gacanepa가 소유한 PIDs가 무엇인지 확인하는 것이 유용할 수 있습니다:
# 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 특정 명령어를 분석했습니다.
이 목록은 이 주제의 모든 세부 사항을 다루기 위한 것이 아니므로 아래의 댓글 양식을 사용하여 본인이 선호하는 도구 및 명령어를 추가하십시오. 질문 및 다른 의견도 환영합니다.
Source:
https://www.tecmint.com/rhcsa-exam-boot-process-and-process-management/