INIT=/bin/sh 커널 매개변수로 부팅한 후 즉시 셸을 종료하면 시스템이 완전히 유휴 상태입니까?

INIT=/bin/sh 커널 매개변수로 부팅한 후 즉시 셸을 종료하면 시스템이 완전히 유휴 상태입니까?

다음과 같이 시작하면 어떻게 될까요?

GRUB 명령줄이나 유사한 명령을 통해 커널에 인수를 전달한 다음 INIT=/bin/sh(or /bin/bash),
셸이 로드되면 시작합니다. 그러면 컴퓨터는 어떤 키를 눌러도 응답하지 않게 됩니다.

궁금해상태현재 시스템. 내가 아는 한, 이것은 init커널이 로드된 후 실행될 첫 번째 프로세스이고 다른 프로세스는 fork여기에서 실행되는데, 일반적인 부팅 프로세스를 사용 /bin/sh하는 대신 위와 같이 실행 하면 init시스템이 더 이상 모든 프로세스. 해.

달리는 것만큼 유휴 상태입니까?

while (1) {
    sleep(1);
}

아니면 또 뭐야?

모든 사람의 제안에 감사드립니다.어쩌면 더 많은 정보가 도움이 될 것입니다.나는 이것이 불필요하다고 생각하곤 했습니다.

저는 최근 CentOS 7.2 서버에서 작업 중이었고 XFS 디스크 파티션 중 하나가 작동하여 시스템 시작 시 확인하고 복구하는 데 무한한 시간이 걸렸습니다. /etc/fstab이 파티션에 대한 자동 마운트를 끄도록 편집할 계획입니다 . 정상적인 부팅 프로세스가 중단되었기 때문에 init=/bin/bash시스템을 bash로 부팅한 적이 있습니다. 편집 후 실수로 쉘을 실행했는데 fstab,exit그러면 화면이 어떤 키를 눌러도 Ctrl-Alt-Del반응 하지 않게 됩니다(포함).(그 방이 시끄러워서 CPU가 열심히 일하고 있는지 알 수 없었습니다.) 나는 그것을 한가하고 할 일이 없다고 생각합니다. 이 현상은 제가 처음에 썼던 질문에 대해 생각하게 만들었습니다.

오늘 밤 나는 Debian 8이 설치된 내 노트북에서 몇 가지 테스트를 수행했습니다.커널 패닉이 분명함.

답변1

놀랐어요. 내 이해는 PID 1을 종료하는 것입니다커널 패닉 발생. 거기서 무슨 일이 일어났는지 말해줄 수 있어요.

패닉 동작은 구성 가능합니다. 도달하게 될 기본 옵션을 사용하면반지당신이 말한 것과 정확히 같습니다.

사용되는 지연 함수는 다음과 같습니다.녹음된"바쁨 대기"로. 이것은아니요일반적으로 유휴 상태일 때 운영 체제에서 사용하는 절전 CPU 절전 상태로 들어갈 것으로 예상됩니다.

패닉 프린트의 역추적을 보면 이 모든 일이 발생한다는 것을 알 수 있을 것입니다 sys_exit(). 기술적으로 PID 1은 손상되지 않으며 시스템 호출에서 결코 반환되지 않습니다. 먼저 다른 CPU를 중지하십시오.

(라는 것이 있습니다."유휴 스레드 시작". 나는 그것이 그 과정에 관여한다고 보지 않습니다. AFAICT 당신은 이 스레드를 볼 수 없을 것입니다. 이것을 유휴 스레드로 이해하려면 다른 CPU가 온라인 상태가 되면 유휴 스레드를 제공하는 것이 무엇인지 물어봐야 합니다.

답변2

사용자 수준 프로세스가 실행되고 있지 않다면 시스템이 아무 작업도 하지 않는다는 것은 사실이 아닙니다. 시스템에는 여러 가지가 있습니다.커널 스레드, 커널 자체가 시작되었습니다. 그들은 대부분의 시간 동안 잠을 자지만, 작업을 수행하기 위해 주기적으로 깨어납니다. 커널 스레드는 커널 공간 코드만 실행합니다. 즉, 사용자 수준 메모리 매핑이 없습니다. 독립적으로 예약되고 고유한 프로세스 ID를 갖기 때문에 독립적인 프로세스입니다.

를 실행하는 경우 ps aux스레드 이름 주위의 대괄호로 커널 스레드를 식별할 수 있습니다.

답변3

시스템에 실행 중인 프로세스가 없습니다. 따라서 귀하가 작성한 것과 같은 바쁜 루프가 없습니다(100% CPU 사용률). 인터럽트는 여전히 커널에 의해 처리될 수 있지만 프로세스에서는 처리될 수 없습니다. CPU는 유휴 상태가 됩니다.

자세한 내용은 여기에서 확인할 수 있습니다.kernel_init() 소스, 프로그램 실행은 와 유사합니다 execve(). 이는 실행이 반환되지 않음을 의미하기도 합니다(참고자료 참조 execve(3p)).

관련 정보