터미널 명령을 사용하여 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 now및 shutdown -r now발송하면 처리 TERM뒤에 붙는 신호 KILL신호.

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