물리적 스위치 / 소켓을 사용하지 않고 컴퓨터를 즉시 종료하는 방법 (1-5 초)?


17

시스템을 즉시 종료 할 수있는 명령 / 프로그램이 있습니까 (1-5 초)?

업데이트 (2015) : 전원 소켓을 사용하지 말 것을 제안한 사람들에게 감사합니다. :디

업데이트 (2016) : @technophile은 문제의 본질을 설명하는 질문에 정보를 추가해야한다고 제안했습니다. 주로 어떤 시나리오를 해결하려고 했습니까? 이 질문이 몇 년 전에 요청 된 시나리오는 다음과 같습니다.

우리는 (공항, 호텔 등) 공공 장소에 배치 될 시스템을 구축하고있었습니다. 사람들은이 시스템을 인터넷 서핑, 이메일 확인 또는 심지어 신용 카드를 사용한 예약 등을 위해 사용할 수 있습니다. 시스템 구축은 키로거 종류의 소프트웨어가 어떻게 든 설치 되더라도 두 번째 사용자가 해당 시스템의 이전 사용자의 정보 (이메일, 신용 카드)를 절대 얻을 수 없도록하는 것입니다. 시스템은 어떻게 그것을 확인 했습니까? 공개 정보가 아니기 때문에 세부 정보를 공유 할 수 없습니다. 그러나 새로운 시스템 사용자를 위해 항상 새로운 운영 체제 (새로 설치 한 것처럼)를 유지할 수있는 방법을 개발했습니다. 문제는 단지 첫 사용자가 기계를 나가 자마자 기계를 종료하고 다시 가동시켜야한다는 것이 었습니다.

그리고 종료가 즉각적으로 빠르기를 원했습니다 (그래서 질문입니다). 그리고 다음 부팅이 너무 빠르기 때문에 Damn Small Linux에서 Slackware, Debian 등으로 많은 Linux 배포판을 연구하고 시도했습니다. 별도의 이야기.


1
가장 빠른 코드는 실행되지 않는 코드이므로 시스템을 종료하는 가장 빠른 방법은 전원을 켜지 않는 것입니다. 구체적인 답변이 필요한 경우 달성하려는 목표를 설명하십시오.
Dmitry Grigoryev

2
@ Sam152 어느 벽?
choc

"내 시스템을 손상시키지 않고"도 지정 하시겠습니까, 아니면 걱정하지 않습니까?
Technophile

@Technophile는 물론 내 시스템을 영구적으로 손상시키지 않습니다. 그러나 당신은 무엇을 생각하고 있습니까?
choc

나의 목적은 당신이 무엇을 요구하고 무엇을하려고하는지 명확히하는 것입니다. 나는 전자 공학에서 일합니다. "즉시"1 초를 의미합니까? 1ms? 1us? 1ns? 당신은 단순히 참을성이 없습니까, 아니면 특정한 필요가 있습니까? (예를 들어) 6 초 종료 시간의 결과는 무엇입니까? 전원 버튼을 눌렀을 때 종료가 5 초를 초과하면 SD 카드가 손상되는 내장 시스템을 사용하고 있습니다. 뭐하는거야?
Technophile

답변:


32
sudo shutdown -h now

9
시스템이 즉시 종료되지는 않습니다 . ;)
Marcel Korpel 2019

14
@Marcel Korpel : 자신의 시스템을 손상시키지 않으면 서 즉시해야 할 일;)
Felix

@Felix-Linux는 매우 강력한 시스템이며 Windows가 견뎌낸 것과 동일한 "하드 재부팅"을 처리 할 수 ​​없다고 계속 들었습니다. 놀라운 일이 될 것입니다)
Gnoupi

2
@Gnoupi : 갑작스러운 종료를위한 취약성없이 OS를 구축 할 수 없습니다. 그렇지 않으면 가장 빠른 종료 방법에 대한 대답은 전원 코드를 잡아 당기는 것입니다.
harrymc

1
일부 버전에서는 구문이 다릅니다. "sudo shutdown -g0 -y -i5"(Solaris). 물론 어렵게 만들기 위해 "i"뒤에 오는 정확한 값은 시스템마다 종료 할 때 다를 수 있습니다. 종료를 위해 다른 많은 시스템에서는 0이라고 생각합니다. 한숨. 많은 사람들이 선택할 수있는 표준을 좋아합니다!
Brian Knoblauch

14

당신이 정말로 특별한 이유에 의해 강요받지 않으면 다음을 수행하지 않는 것이 좋습니다.

kill -SEGV 1   # should generate a core dumps and kernel panic
kill -ABRT 1   # should generate a core dumps and kernel panic
kill -9 1      # On old systems worked nowadays not

거칠고 잔인하며 전원 코드를 뽑는 것과 비슷한 것으로 간주 될 수 있습니다 ...

올바른 방법 입니다 shutdown -h now함께 sudo필요시 전에.
어쩌면 나는 합법적 인 방법으로 말해야한다 . 아래 또는 더 나은 tl; dr 참조.


더 많은 단어들 , 일명 이야기 1 장
처음에는 시작이었고 끝까지 끝날 것입니다.

전체 리눅스 는 init사랑에 찬 관심 에 의존한다 [ 1 ] [ 2 ] . 그럼에도 불구하고 어느 정도의 배고픔이 없다면, 좋은 주님 루트 사용자 는이 사랑을 배신 하고 논쟁의 여지가없는 ( ) 명령으로 갑자기 초기화 될 수 있는 시간이있었습니다 . ( 에티켓은 사용자 가 전에 호출 할 수, 공작 및 후작을 규정 합니다 ). kill-9
sudo

그런 다음 몇 가지 마법사 (의 책에서 초기화 보호 할 수있는 매력을했다 man 2 init)

프로세스 ID 1, init 프로세스로 보낼 수있는 유일한 신호는 init가 명시 적으로 신호 처리기를 설치 한 신호입니다. 이것은 실수로 시스템이 다운되지 않도록하기 위해 수행됩니다.

(우리의 간첩 신고 [ U1을 ] 초기화가 처리 할 것을 1 HUP 6 ABRT 11 SEGV 15 TERM (30) PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
소위 좋은 주님의 루트 사용자 소식을 배우고에서 명령을 변경 kill -ABRT 1하거나 kill -SEGV 1그 보통을 생성 커널 패닉과 코어 덤프.

init 가 실행되는 첫 번째 프로세스 이므로 PID 번호 1 [ 2b ]을 사용 하기 때문에 작동합니다 .

이것은 안전하지 않으며 현명하지 않으며 나쁜 징조와 저주가 있다고 생각하지만 실제로 손을 대고 플러그를 뽑을 수 없다면 ...

저주 : 로그에 쓰지 않고 모든 프로세스를 종료하지 않고 종료를 기다리지 않고 HDD에 올바르게 기록하지 않아 inode를 올바르게 업데이트하지 않으며 파일 시스템을 마운트 해제하지 않습니다. 전원 코드를 뽑거나 랩톱의 경우 배터리를 분리하는 것과 비슷하다고 말했듯이 그래픽 창 및 쉘 기록 옵션과 상상력을 능가하는 옵션을 저장하지 않아도됩니다.


올바른 방법
"비는 노비스, 도미는, 비 NOBIS, SED는 NOMINI TUO 다 gloriam.", 템플러는 모토 기사입니다. 합법적 인 (정확한) 방법을 사용하는 것이다 [ 3 ]
shutdown

sudo shutdown -h now

시스템 종료는 시스템을 안전하게 중단시킵니다. 로그인 한 모든 사용자에게 시스템이 다운되고 있다는 알림이 표시됩니다.

하지만 -h now그들 과 함께 할 시간이 충분하지 않을 것입니다 ...


좀 더 말하면 , 일명 이야기 2 장
옛날 옛적에 몇 가지 논리적 인 단계가 유닉스 사람들에게 하늘에서 느껴졌습니다.

시스템 프로세스가 종료되고 파일 시스템이 마운트 해제되면 시스템이 자동으로 정지 / 전원 끄기 또는 재부팅됩니다. halt 또는 reboot 명령을 사용하여 변경 사항을 디스크에 동기화 한 다음 실제 중지 / 전원 끄기 또는 재부팅을 수행합니다. [ 4 ]

사실, 요즘, 우리는 세 가지 모이라이의 존재를 더 이상 신뢰하지 않는다 [ 5 ]리눅스 세계 , reboot, poweroffhalt[ 6 ] 다음 현대 과학ls -l $(which poweroff halt reboot)와의 일 man reboot이 어두운 시대에 스프레드 새로운 빛과 우리를 공개 모든 옵션을 구문 분석하는 명령이 하나뿐이므로 명령 이름과 모순되는 작업을 자유롭게 요청할 수 있습니다! ( halt -p또는 reboot -ppoweroff, shutdown -rreboot...)

이제 모두가 모두를위한 명확하고 아늑한 될 듯, 소문이 주장 [ 7 ] 에 있음을 지하systemd 도구 세트 [ 8 ] 혁명이 전체 알지 못하고 떠나는 하였다 overworld을 . 이전 버전과의 호환성 심 덕분에 재부팅, 전원 끄기, 중지 [ 6 ] , 심지어 telinit [ 9 ] 및 종료 [ 3 ] 도 이미 새로운 왕 systemctl [ 10 ]에 묶여 있음을 전혀 알지 못했습니다 .. 더 이상 숨 을 쉬지 않기 때문에 JdeBP The Bard [ 9 ] 의 원래 목소리에서 모든 이야기를 들어주십시오 .

당신이 우분투 숭배의 추종자 들이라면, 당신은 여전히 ​​그 모든 주장들에 대해 한동안 알고있을 것입니다 [ 11 ] .


의 중간 지구는 halt -f, init, telinit, systemctl
빠르고 정확한보다하지만, 마찬가지로 현명한 해결책을 검색.

systemctl --force --force poweroff  # the most close to kill -9 1 
systemctl --force poweroff          # rough but still safe
sudo halt -f                                       # rough
sudo telinit 0        # or 6                       # safe
kill -SIGINT 1        # cause reboot   as the reboot command
kill -SIGRTMIN+4 1    # cause shutdown as the halt command

시스템 상태에 있는지 여부에 따라 올바른 모든 shudown 절차를 수행하지 않고 컴퓨터를 중지 할 수 있어야합니다 (더 빠름).

  1. halt -f: 옵션 지정-f (당신이 필요로하는 것을 참고 -f로, 위의 명령으로 종료 절차를 피하기 위해를) sudo poweroff -f또는 어쩌면에 sudo reboot -f -h. 실제로 종료를 호출하지 않도록 man reboot옵션 -f을 지정해야 할 필요성에 대해 읽을 수 있습니다 .

    --force 또는 호출 레벨 0 또는 6에서 호출되면이 도구는 reboot (2) 시스템 호출 자체를 호출하고 (REBOOTCOMMAND 인수가 전달 된 상태) 시스템을 직접 재부팅합니다 .

    그렇지 않으면 REBOOTCOMMAND 인수를 전달하지 않고 적절한 인수로 shutdown (8) 도구호출합니다 .

    -f, --force
    shutdown (8)을 호출하지 않고 대신 name에서 예상되는 실제 작업을 수행합니다 .

  2. 또한 telinit [ 2b ] (또는 init직접)를 사용할 수 있습니다

    sudo telinit 0    # or 6
    

    init에게 런레벨을 바꾸라고 말하지만 ... 그렇다면 왜 직접 죽이지 않습니까?

  3. 체계화 된 현명한 이중 옵션을 사용할 수 있습니다 --force --force

    systemctl --force --force poweroff  
    

    systemctl 매뉴얼에서 읽기 [ 10 ]

    -f, --force
    enable과 함께 사용하면 기존의 충돌하는 심볼릭 링크를 덮어 씁니다. , 또는 kexec
    와 함께 사용하는 halt경우poweroffreboot 모든 장치를 종료하지 않고 선택한 작업을 실행하십시오. 그러나 모든 프로세스가 강제로 종료되고 모든 파일 시스템이 읽기 전용으로 마운트 해제되거나 다시 마운트됩니다. 따라서 즉각적인 재부팅을 요청하는 과도하지만 비교적 안전한 옵션입니다. 이러한 작업에 --force를 두 번 지정하면 프로세스를 종료하거나 파일 시스템을 마운트 해제하지 않고 즉시 실행됩니다. 경고 : 이러한 작업 중 하나에 --force를 두 번 지정 하면 데이터가 손실 될 수 있습니다.

Ps> 테일 JdeBP The Bard [ 7 ] 의 변형에 대해 영감을 얻으십시오 .


9

/ proc / sysrq-trigger에 "o"를 루트로 쓰면 디스크를 동기화하지 않고 즉시 시스템 전원을 끌 수 있습니다.

쉘 스크립트로서 다음과 같이 보일 것입니다

#!/bin/sh
echo o >/proc/sysrq-trigger

/ proc / sysrq-trigger에 대한 권한이 있으면 sysctl을 통해 활성화 할 필요가 없습니다. 이 옵션은 키보드에 의한 트리거에만 영향을줍니다.

나중에 읽으려는 파일 시스템이있는 시스템에서는이 작업을 수행하지 않는 것이 좋습니다.

Google Compute Engine에서 이것을 사용하여 10 분 전에 템플릿 템플릿 인스턴스를 학살하여 클러스터 작업의 비용 효율성을 극대화합니다.


5
이것이이 질문에 대한 최선의 답변입니다. OP는 전원에서 분리 한 것과 비슷한 방식으로 시스템을 종료하고 싶다고 밝히고있다. 아무도 그것을 이해할 수없는 이유를 이해하지 못합니다.
Petr

1
bo재부팅하는 대신 (질문이 업데이트 된 이후 관련).
Kamil Maciorowski

7

Magic SysRq 키 조합 을 사용해야합니다 REISUB.

" 코끼리를 키우는 것은 너무 지루하다 ... "


2
아니요. REISUB가 다시 시작합니다. REISUO가 종료됩니다. 또는 간단히 O.
Benoit



2

전원 키를 약 4 초 동안 누르고 있으면 매우 빠릅니다.


1
그렇게하면 전원 스위치를
돌리는

OS가 전원 관리를 수행한다고 가정하면 다른 종료 방법과 동일합니다.
harrymc

1
실제로 몇 초 동안 기다릴 수없고 전력을 중단하려는 경우, ext3 / ext4와 같은 저널링 파일 시스템을 사용하여 기록되지 않은 쓰기로 인해 많은 데이터를 잃지 않도록하십시오.
CarlF

프로그래밍을하지 않고 소프트웨어를 사용하지 않는 종료 방법을 찾지 않으면 @Gnoupi 제안이 더 빠릅니다. ;)
choc

2

특정 Linux 배포판에서 shutdown은 -n 옵션을 제공합니다. ( man shutdown을 참조하십시오 ). 특정 배포판 (예 : sysvinit 대신 upstart를 사용하는 우분투)은 그의 플래그를 지원하지 않으며,이 플래그는 (맨 페이지에서 배울 수있는) 위험이 없습니다. 나는 이것을 수년 동안 사용해 왔지만 (노트북에서 모든 데몬이 올바르게 종료되는 것을 신경 쓰지 않고 모든 것이 종료되고 디스크 캐시가 플러시되기를 원합니다) (정기 종료보다 빠르며 플러그 (및 친구)). 이것이 문제를 해결하는지 확인할 수 있습니다.


2

이 작은 스크립트를 사용하여 시스템을 끕니다. 실제로 "프로토 타이핑"머신의 장난에 이것을 사용했습니다 : "이봐, 친구, 그 멋진 .sh가 무엇을하는지 보자!"

#!/bin/bash
echo 1 > /proc/sys/kernel/sysrq-trigger; #enables sysrq triggers
echo u > /proc/sysrq-trigger # remount the system as ready only
#edited# echo s > /proc/sysrq-trigger # sync all write-pending data to disk
sync
echo o > /proc/sysrq-trigger # shut off the system power.

(이 스크립트는 앞에서 설명한 것처럼 Alt+ SysRq+ u/ s/ 를 치는 것과 동일합니다 o.) 물론 비정상적인 시스템 종료 (mysql 테이블 등이 충돌 할 수 있음)를 일으키지 않으므로 더미 머신에서만 사용하십시오. 참고 : 동기화에는 시간이 걸릴 수 있습니다. 시스템에 사용 가능한 메모리 (캐시 용)가 많고 많은 파일을 펜 드라이브에 복사하면 동기화하는 데 더 많은 시간이 걸리지 만 장난에도 권장됩니다.

편집 : sync's'를 쓰는 대신 사용 하는 것이 좋습니다. 's'를 sysrq-trigger쓰면 스크립트 실행이 차단되지 않으므로 캐시를 디스크에 쓰도록 요청하면 컴퓨터가 즉시 종료됩니다. sync명령 과 달리 sync쓰기 프로세스가 완료되면 반환됩니다. 따라서 캐시 플러시가 완료 될 때까지 스크립트 실행이 차단됩니다.


1
'u'보다 's'가 아니어야합니까? 또한 루프로 :SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done
Que Quotion
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.