터미널 명령을 사용하여 Mac을 종료, 재시동 및 잠자기합니까?


120

Mac에서 솔루션을 해결하는 다른 방법으로 터미널을 사용하는 데 더 관심이 있습니다. "OSX를 종료 / 재시작하는 더 좋은 방법이 있습니까?" 라는 제목의 질문을 보았습니다. .

그러므로 알고 싶습니다 :

터미널 명령을 독점적으로 사용하여 Mac을 종료하고 재시동하고 잠자기하는 방법은 무엇입니까?


다시 시작을위한 재부팅도 작동합니다.
atilkan

답변:


147

다음 명령은 shutdown 입니다. 이것은 모든 사용자에게 머신이 종료 될 것임을 알리고 모든 앱이 파일을 닫도록 지시합니다.

이 명령은 매개 변수 -h, -r 또는 -s를 사용하여 Mac을 종료, 재시동 또는 휴면 상태로 만듭니다.

명령은 root로 실행해야하므로 sudo를 사용해야합니다.

예 : 기계를 즉시 재부팅

sudo shutdown -r now

예 : 60 분 안에 기계를 종료

sudo shutdown -h +60

의견에서 다루어야 할 두 가지가 있습니다

종료가 작동하는 방법은 모든 프로세스에 sigterm을 전송하여 열려있는 파일 저장 등을 처리하는 것입니다. 종료하지 않으면 SIGKILL이 전송되어 응답 할 기회없이 죽게됩니다. 신호는 일반 키 메시지 대기열을 통해 전송되지 않으므로 Apps는 메뉴의 종료에서 호출되는 코드와 별도로 처리해야합니다. 좋은 앱은 둘 다 공통 코드를 호출해야합니다.

다른 답변 은 메뉴 옵션을 누르는 것처럼 종료하는 방법을 보여줍니다. 그러나 앱이 종료를 취소 할 수 있습니다.


2
질문과 대답에 약간 관련이 없지만 가치가있는 것은 터미널에서 Mac을 잠그는 데 유용합니다 .Windows에서 Winkey + L을 누르는 것과 같습니다 /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend. 나는 다음과 같이 내 .bash_profile에 소스 파일로 별칭이 있습니다 :alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
rubynorails

실제로 "파일을 닫으려면 모든 앱에 알리십시오"? 방금 모든 걸 죽인 줄 알았어요? 매뉴얼 페이지는 1998 BSD에서 가져온 것입니다. Apple이 macOS 소프트웨어와 대화하기 위해 명령을 업데이트 했습니까? 작업이 중단 된 경우 유용하지만 시스템이 제대로 작동하는 경우 로그인 창 프로세스에 작업을 수행하도록 지시하는 것이 더 "정치적"인 것처럼 보입니다.
j-beda

@ j-beda Apple doc developer.apple.com/legacy/library/documentation/Darwin/…을 참조하십시오 .-먼저 SIGKILL을 받기 전에 처리해야하는 앱을 SIGTERM으로 보냅니다. 로그인 창 / GUI를 통해 다른 답변을보십시오. 실제로 로그인 창은 어떻게 행동합니까?
user151019

필자는 유닉스 "종료"가 일반 Mac GUI 종료 프로세스가 수행하는 모든 작업을 수행하지 않으므로 Apple이 자체 소프트웨어에서 직접 사용하지 않지만 호출하기 전에 최소한 일부 작업을 수행한다고 확신합니다. 직접 호출하면 몇 가지 단점이 있습니다. "loginwindow"앱은 GUI 로그인 창이 아닌 경우에도 사용할 수 있으며 "osascript"명령 줄을 통해 호출 할 수 있다고 생각합니다. 그러나 완벽한 것은 아니므로 어쨌든 "종료"를 호출해야 할 수도 있습니다 (또는 내가 생각한 특정 프로세스에 개별 킬을 보내야 함).
j-beda 1

신호 메커니즘은 정상적인 닫기와 같이 앱 메시지 큐에 메시지를 넣지 않지만 앱은 여전히 ​​메시지를 처리해야합니다. 즉, 제대로 작동하지 않으면 앱 오류입니다. GUI에 대한 일부 시도는 다른 답변을 참조하십시오. 하지만 죽기를 거부하고 종료 프로세스를 취소하는 앱이 종종 있다는 것을 알았습니다. 따라서 종료는 유일한 방법입니다
user151019

94

확인 대화 상자를 표시하지 않고 종료하십시오.

osascript -e 'tell app "System Events" to shut down'

확인 대화 상자를 표시 한 후 종료하십시오.

osascript -e 'tell app "loginwindow" to «event aevtrsdn»'

확인 대화 상자를 표시하지 않고 다시 시작하십시오.

osascript -e 'tell app "System Events" to restart'

확인 대화 상자를 표시 한 후 다시 시작하십시오.

osascript -e 'tell app "loginwindow" to «event aevtrrst»'

확인 대화 상자를 표시하지 않고 로그 아웃하십시오.

osascript -e 'tell app "System Events" to  «event aevtrlgo»'

확인 대화 상자를 표시 한 후 로그 아웃하십시오.

osascript -e 'tell app "System Events" to log out'

수면 ( pmset)으로 이동 :

pmset sleepnow

절전 모드로 전환 (AppleScript) :

osascript -e 'tell app "System Events" to sleep'

디스플레이를 잠자기 상태로 설정 (10.9 이상) :

pmset displaysleepnow

Apple 이벤트의 4 가지 문자 코드는에 나열되어 AERegistry.h있습니다.

위의 모든 시스템 이벤트 명령은 loginwindow프로세스에 Apple 이벤트를 보냅니다 . loginwindow로그 아웃, 재시동, 종료 또는 Mac을 정상적으로 잠자기 상태로 전환하면 위와 동일한 Apple 이벤트가 전송됩니다. 기술 Q & A QA1134 : 프로그래밍 방식으로 재시작, 종료 및 / 또는 로그 아웃을 유발합니다를 참조하십시오 .

에 따르면 man shutdown, shutdown -h nowshutdown -r now발송하면 처리 TERM뒤에 붙는 신호 KILL신호.

데몬 및 서비스 프로그래밍 안내서 에 따르면 loginwindow로그 아웃 할 때 갑자기 종료를 지원하는 프로세스는 KILL신호를 보내며, 갑자기 종료를 지원 하지 않는 프로세스는 다른 방식으로 종료됩니다. Cocoa 애플리케이션은 applicationShouldTerminate:델리게이트 메소드를 수신합니다 . 포 그라운드 애플리케이션 kAEQuitApplicationApple 이벤트를 수신하고 백그라운드 응용 프로그램은 kAEQuitApplicationApple 이벤트 KILLTERM신호를 수신하고 데몬 KILL은 몇 초 후에 신호와 신호를 수신합니다 .


-4

즉시 종료 :

**sudo shutdown -h now**

시스템 종료를 지연시키려는 경우 다음 명령 구문을 대신 사용할 수 있습니다.

**sudo shutdown -h +30**

(-h 매개 변수 설정 시간 종료, 여기서 시스템을 중지하려면 (+) 30 분)


2
귀하의 답변에 제시된 정보는 이미 수락 된 답변에 포함되어 있으므로 이미 언급되고 수락 된 내용을 반복 할 필요가 없습니다.
user3439894

-11

또한 터미널 명령 행 프롬프트에서 로그 아웃하려면 'exit'을 입력하십시오.

[host:~user]$ exit

10
이 방법으로 Mac을 종료, 재시동 또는 잠자기합니까?
bmike

어느 쪽이든, 나는 Ctrl-D명령 줄 기록을 어지럽히 지 않기 때문에 로그 아웃 하는 것을 선호 합니다.
mwfearnley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.