ターミナルコマンドを使用してMacをシャットダウン、再起動、スリープしますか?


120

私は、Mac上のソリューションに対処するための代替方法としてターミナルを使用することにもっと興味を持っています。私はと題し、この質問を見てきました「シャットダウン/再起動のOSXに良い方法はありますか?」

したがって、私は知りたい:

Terminalコマンドのみを使用してMacをシャットダウン、再起動、スリープする方法は?


再起動のための再起動も機能します。
-atilkan

回答:


147

後のコマンドはshutdownです。これは、マシンがシャットダウンされることをすべてのユーザーに通知し、すべてのアプリにファイルを閉じるなどを指示します。

このコマンドは、パラメーター-h、-r、または-sを使用して、Macをシャットダウン、再起動、またはスリープします。

コマンドはrootとして実行する必要があるため、sudoを使用する必要があります。

たとえば、すぐにマシンを再起動する

sudo shutdown -r now

例:60分でマシンをシャットダウンする

sudo shutdown -h +60

コメントから、対処すべき2つのことがあります

シャットダウンの仕組みは、すべてのプロセスにsigtermを送信することです。たとえば、開いているファイルを保存するなどの処理を行う必要があります。シグナルは通常のキーメッセージキューを介して送信されないため、アプリはこれをメニューの終了から呼び出されるコードに個別に処理する必要があります。良いアプリは両方から共通のコードを呼び出す必要があります。

この他の答えは、メニューオプションを押すかのようにシャットダウンする方法を示しています。ただし、アプリはこのシャットダウンをキャンセルできることに注意してください


2
質問とこの回答とは少し関係ないかもしれませんが、これはWindowsでWinkey + Lを押すようなもので、ターミナルからMacをロックするのにも役立ちます/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

本当に「すべてのアプリにファイルを閉じるなどを伝える」のでしょうか?私はそれがすべてを殺したと思った?manページは1998年のBSDからのものです-AppleはmacOSソフトウェアとうまく話せるようにコマンドを更新しましたか?物事がハングした場合に役立ちますが、システムが正常に機能している場合、loginwindowプロセスに行為を行うように指示することは、より「丁寧」になりそうです。
j-beda

@ j-beda Appleのドキュメントを参照developer.apple.com/legacy/library/documentation/Darwin/…-SIGKILLを受信する前に、まずアプリが処理するSIGTERMを送信します。ログインウィンドウ/ GUIを介してそれを行うための他の回答を参照してください実際にログインウィンドウはどのように行為をしますか?
user151019

Unixの「シャットダウン」は、通常のMac GUIシャットダウンプロセスが行うすべてのことを行うわけではないので、Appleが独自のソフトウェアで直接使用せずに、少なくとも起動前にいくつかのことを行うと確信しています。それを直接呼び出すにはいくつかの欠点があります。「loginwindow」アプリは、GUIのログインウィンドウにないときでも使用でき、コマンドラインの「osascript」ツールから起動できると考えています。しかし、それは絶対的ではないので、とにかく「シャットダウン」を呼び出す必要があるかもしれません(または、私が思うに特定のプロセスに個々のキルを送信する)。
j-beda

シグナルメカニズムは、通常のクローズのようにアプリのメッセージキューにメッセージを配置しませんが、アプリはそれを処理する必要があります。すなわち、それが適切に動作しない場合、それはアプリのせいです。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ます。

上記のすべてのシステムイベントコマンドは、Appleイベントをloginwindowプロセスに送信します。loginwindowログアウト、再起動、シャットダウン、またはMacを通常のスリープ状態にしたときに、上記と同じAppleイベントが送信されます。技術的なQ&A QA1134:プログラムによる再起動、シャットダウン、ログアウトを参照してください。

よるman shutdownshutdown -h now及びshutdown -r now送信する処理TERMに続いて信号KILL信号を出力します。

Daemons and Services Programming Guideによると、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.