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

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

다음과 같이 부팅하면 어떻게 될까요?

INIT=/bin/sh(or /bin/bash)GRUB 명령줄이나 유사한 방법을 통해 매개변수를 커널에 전달한 후 부팅합니다.
쉘이 로드되면 즉시 종료하십시오. 그러면 컴퓨터는 어떤 키를 눌러도 반응이 없습니다.

나는 그 내용이 상당히 궁금하다.상태현재 시스템의. 커널이 로드되고 다른 프로세스가 모두 여기에서 실행 init되면 실행되는 첫 번째 프로세스라는 것을 알게 되었기 때문에 일반적인 부팅 절차 대신 위에서 설명한 대로 실행하면 시스템에 더 이상 프로세스가 없고 아무것도 없는 것 같습니다. 할 것.fork/bin/shinit

달리는 것처럼 한가한가

while (1) {
    sleep(1);
}

아니면 또 뭐야?

조언해 주신 모든 분들께 감사드립니다.어쩌면 더 많은 정보가 도움이 될 수도 있습니다.나는 그것이 불필요하다고 생각하곤 했습니다.

최근 CentOS 7.2 서버에서 작업했는데 하나의 XFS 디스크 파티션이 정상이 아니어서 시스템 부팅 시 확인 및 복구를 수행하는 데 무한한 시간이 소요됩니다. /etc/fstab이 파티션의 자동 마운트를 끄도록 편집할 계획이었습니다 . 정상적인 부팅 절차가 중단되었기 때문에 init=/bin/bash시스템을 bash로 부팅하곤 했습니다. 편집 후 무심코 fstab쉘을 실행했는데 ,exit다음을 포함하여 어떤 키를 눌러도 화면에 응답이 없으며 Ctrl-Alt-Del커널 패닉을 유발하는 정보도 없습니다.(그 방은 너무 시끄러워서 CPU가 열심히 작동하는지 알 수 없었습니다.) 나는 그것을 단지 할 일이 없는 것처럼 유휴 상태로 여겼습니다. 이 현상은 제가 처음에 썼던 질문에 대해 생각하게 만들었습니다.

그리고 오늘 밤 데비안 8이 설치된 내 노트북 ​​컴퓨터에서 몇 가지 테스트를 했습니다.분명히 커널 패닉.

답변1

놀랐어요. 내 이해는 PID 1을 종료하는 것이었습니다.커널 패닉을 일으킴. 그 경우에 무슨 일이 일어났는지 말씀드릴 수 있어요.

패닉 동작은 구성 가능합니다. 기본 옵션을 사용하면고리당신이 말하는 것과 정확히 같습니다.

사용되는 지연 함수는 다음과 같습니다.문서화"바쁨 대기"로 간주됩니다. 그것은~ 아니다OS가 정상적으로 유휴 상태일 때 사용되는 절전 CPU 절전 상태로 들어갈 것으로 예상됩니다.

패닉에 의해 인쇄된 역추적을 보면 이 모든 일이 sys_exit(). 기술적으로 PID 1은 파괴되지 않고 시스템 호출을 통해 결코 반환되지 않을 뿐이라고 생각합니다. 다른 CPU는 먼저 중지됩니다.

('이라는 것이 있다."부팅 유휴 스레드". 나는 그것이 이 과정에 관여하지 않는다고 본다. AFAICT 당신은 이 스레드를 절대 볼 수 없습니다. 그리고 이를 유휴 스레드로 이해하려면 온라인 상태가 된 다른 CPU에 유휴 스레드를 제공하는 것이 무엇인지도 질문해야 합니다.

답변2

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

를 실행하면 ps aux스레드 이름을 둘러싼 대괄호로 커널 스레드를 인식할 수 있습니다.

답변3

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

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

관련 정보