Linux에서 Ctrl+Alt+Del을 누르면 실행되는 의미와 명령은 무엇입니까?

Linux에서 Ctrl+Alt+Del을 누르면 실행되는 의미와 명령은 무엇입니까?

Ubuntu 12.04의 gnome GUI 데스크탑에서 Ctrl+ Alt+는 Delete재부팅하는 대신 로그아웃됩니다.

그런데 내가 그런 말을 들었어.

텍스트 기반 가상 콘솔로 전환하고 Ctrl+Alt+Delete를 누르면 머신이 재부팅됩니다. 완전히 종료되고 재부팅됩니다. 이는 Alt+SysRq+REISUB보다 훨씬 좋습니다.

그러면 위의 Ctrl+ Alt+ 의 두 가지 다른 의미 Delete가 맞는지 궁금합니다.

이 두 가지 경우에 어떤 명령 Ctrl+ Alt+ 가 바인딩됩니까?Delete

답변1

Ctrl+ Alt+는 Delete실제로 BIOS 재설정을 호출하는 IBM PC 호환 하드웨어 아키텍처의 "마법" 키 입력입니다.

이런 종류의 일은 Linux와 같은 시스템에서는 위험하기 때문에 해당 키 입력을 연결하고 대신 다른 작업을 수행하기로 결정했습니다. 이는 에 의해 제어되며 init를 보면 그 기능을 확인할 수 있습니다 /etc/inittab.

내 Debian Squeeze 시스템에서:

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

나중에 Windows NT도 이에 따라 Ctrl+ Alt+를 Delete보안 키 입력 모드*로 전환했습니다.

X의 경우 유사하게 키 입력을 연결하지만 이는 단순히 kill디스플레이 서버입니다(디스플레이 관리자를 사용하는 경우 자동으로 다시 생성됩니다).

일부 시스템(아마도 전부, 한동안 시도하지 않았음) OS가 로드되기 전에 Ctrl+ Alt+를 눌러 BIOS 재설정을 트리거할 수 있습니다.Delete


* 실제로 뭐라고 부르는지는 잘 모르겠습니다.

답변2

Linux 커널은 하드 재부팅하거나 Ctrl + Alt + Del 시 초기화 프로세스를 SIGINT로 보낼 수 있습니다.

Linux 커널 자체에서는 Ctrl-Alt-Del의 두 가지 가능한 동작을 허용합니다.

  • 즉시 재부팅
  • init 프로세스에 SIGINT를 보냅니다.

사용되는 동작은 다음 중 하나를 통해 선택할 수 있습니다.

  • reboot시스템 호출, 참조man 2 reboot
  • /proc/sys/kernel/ctrl-alt-del

따라서 SIGINT 동작이 활성화되면 Ctrl + Alt + Del의 결과는 init에 있는 SIGINT 핸들러에 전적으로 의존합니다.

예를 들어 BusyBox' 1.28.3 init는 다음 /etc/inittab과 같이 주어진 임의의 명령을 실행합니다.

::ctrlaltdel:/sbin/reboot

다음은 uclibc에 대한 최소한의 흥미로운 C 예제입니다.

#define _XOPEN_SOURCE 700
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/reboot.h>
#include <unistd.h>

void signal_handler(int sig) {
    write(STDOUT_FILENO, "cad\n", 4);
    signal(sig, signal_handler);
}

int main(void) {
    int i = 0;
    /* Disable the forced reboot, enable sending SIGINT to init. */
    reboot(RB_DISABLE_CAD);
    signal(SIGINT, signal_handler);
    while (1) {
        sleep(1);
        printf("%d\n", i);
        i++;
    }
    return EXIT_SUCCESS;
}

여기는이것을 시도해 볼 수 있는 쉬운 설정.

답변3

최신 Linux 배포판은 systemdSysV init 대신 사용됩니다. ctrl-alt-delete 콤보의 동작은 ctrl-alt-del.target에 의해 처리됩니다. ctrl-alt-del.target은 기본적으로 restart.target에 연결되어 있지만 다른 것으로 설정할 수 있습니다.

사용 가능한 대상 목록:

systemctl list-unit-files -t target

대상 전환

2초 내에 콤보를 7번 이상 누르면(예: 길게 누르기) 기본적으로 즉시 재부팅됩니다(또는 에서 지정한 동작 CtrlAltDelBurstAction).

유용한 기능도 있지만 kbrequest.target기본적으로 활성화되어 있지 않습니다.

관련 정보