Sử dụng lệnh Terminal để tắt máy, khởi động lại và ngủ máy Mac của tôi?


120

Tôi đang quan tâm hơn đến việc sử dụng Terminal như một cách khác để giải quyết các giải pháp trên máy Mac của mình. Tôi đã thấy câu hỏi này có tên "Có cách nào tốt hơn để tắt / khởi động lại OSX không?" .

Do đó tôi muốn biết:

Làm cách nào để tắt, khởi động lại và ngủ máy Mac của tôi bằng cách sử dụng lệnh Terminal?


khởi động lại để khởi động lại cũng hoạt động.
atilkan

Câu trả lời:


147

Lệnh bạn đang theo sau là tắt máy . Điều này thông báo cho tất cả người dùng rằng máy sẽ tắt máy và báo cho tất cả các ứng dụng đóng tệp, v.v.

Lệnh lấy tham số -h, -r hoặc -s để tắt, khởi động lại hoặc ngủ Mac.

Lệnh phải được chạy dưới quyền root nên bạn cần sử dụng sudo.

ví dụ để khởi động lại máy ngay lập tức

sudo shutdown -r now

ví dụ: tắt máy sau 60 phút

sudo shutdown -h +60

Từ ý kiến ​​có hai điều cần giải quyết

Cách tắt máy hoạt động là bằng cách gửi sigterm đến tất cả các quy trình xử lý, ví dụ như lưu các tệp đang mở, v.v ... Nếu chúng không thoát thì chúng sẽ được gửi SIGKILL khiến chúng không có cơ hội phản hồi. Các tín hiệu không được gửi qua hàng đợi thông báo khóa thông thường, do đó, Ứng dụng phải xử lý vấn đề này một cách riêng biệt với mã được gọi từ thoát trên menu. Một ứng dụng tốt nên gọi mã chung từ cả hai.

Câu trả lời khác này cho thấy cách tắt máy như thể bạn nhấn các tùy chọn menu. Nhưng lưu ý rằng các ứng dụng có thể hủy bỏ việc tắt máy này


2
Có thể hơi không liên quan đến câu hỏi và câu trả lời này, nhưng với những gì đáng giá thì điều này cũng có ích cho tôi để khóa máy Mac của tôi khỏi Terminal, giống như nhấn Winkey + L trong Windows : /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend. Tôi có bí danh trong một tệp có nguồn gốc trong .bash_profile của tôi như sau:alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
rubynorails

Nó thực sự "bảo tất cả các ứng dụng đóng tập tin, v.v."? Tôi nghĩ rằng nó chỉ giết tất cả mọi thứ? Trang người đàn ông là từ năm 1998 BSD - Apple đã cập nhật lệnh để nói chuyện tốt với phần mềm macOS chưa? Hữu ích nếu mọi thứ đã treo, nhưng nếu hệ thống đang hoạt động tốt, có vẻ như nói với quá trình đăng nhập để thực hiện hành động sẽ "lịch sự" hơn.
j-beda

@ j-beda Xem Apple doc developer.apple.com/legacy/l Library / document / Darwin / trộm - Trước tiên, nó sẽ gửi một SIGTERM mà các ứng dụng nên xử lý trước khi chúng nhận được SIGKILL. Xem câu trả lời khác để thực hiện thông qua Cửa sổ đăng nhập / GUI Trên thực tế, đăng nhập sẽ thực hiện hành động như thế nào?
user151019

Tôi khá chắc chắn rằng "tắt máy" Unix không thực hiện tất cả những thứ mà quy trình tắt máy Mac GUI thông thường thực hiện, do đó, đến mức Apple không sử dụng nó trực tiếp trong phần mềm của họ mà ít nhất là một số thứ trước khi gọi nó, có một số nhược điểm để gọi nó trực tiếp. Tôi tin rằng ứng dụng "loginwindow" có sẵn ngay cả khi không có trong cửa sổ đăng nhập GUI và có thể được gọi thông qua công cụ "osascript" dòng lệnh. Tuy nhiên, điều đó không thể sai được, do đó, người ta có thể cần phải gọi "tắt máy" bằng mọi cách (hoặc gửi các tiêu diệt riêng lẻ đến các quy trình cụ thể mà tôi cho là).
j-beda

Cơ chế tín hiệu không đưa tin nhắn vào hàng đợi tin nhắn Ứng dụng như cách đóng bình thường nhưng ứng dụng vẫn phải xử lý. tức là nếu nó không hoạt động đúng thì đó là lỗi của Ứng dụng. Đối với một số nỗ lực tại GUI, xem câu trả lời khác. Nhưng tôi thấy rằng thường có một ứng dụng từ chối chết và hủy bỏ quá trình thoát nên tắt máy là cách duy nhất được sử dụng
user151019

94

Tắt mà không hiển thị hộp thoại xác nhận:

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

Tắt sau khi hiển thị hộp thoại xác nhận:

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

Khởi động lại mà không hiển thị hộp thoại xác nhận:

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

Khởi động lại sau khi hiển thị hộp thoại xác nhận:

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

Đăng xuất mà không hiển thị hộp thoại xác nhận:

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

Đăng xuất sau khi hiển thị hộp thoại xác nhận:

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

Đi ngủ ( pmset):

pmset sleepnow

Đi ngủ (AppleScript):

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

Đặt màn hình vào chế độ ngủ (10.9 trở lên):

pmset displaysleepnow

Bốn mã thư cho các sự kiện của Apple được liệt kê trong AERegistry.h.

Tất cả các lệnh Sự kiện hệ thống ở trên sẽ gửi các sự kiện của Apple đến loginwindowquy trình. loginwindowđược gửi cùng các sự kiện của Apple như trên khi bạn đăng xuất, khởi động lại, tắt hoặc đặt máy Mac ngủ bình thường. Xem Hỏi đáp kỹ thuật QA1134: Lập trình gây ra khởi động lại, tắt máy và / hoặc đăng xuất .

Theo man shutdown, shutdown -h nowshutdown -r nowgửi cho xử lý một TERMtín hiệu tiếp theo là một KILLtín hiệu.

Theo Hướng dẫn lập trình dịch vụ và Daemons , khi bạn yêu loginwindowcầu đăng xuất, các quy trình hỗ trợ chấm dứt đột ngột sẽ được gửi KILLtín hiệu và các quy trình không hỗ trợ chấm dứt đột ngột sẽ bị chấm dứt theo các cách khác nhau: Ứng dụng ca cao nhận applicationShouldTerminate:phương thức ủy nhiệm, ứng dụng nền trước nhận kAEQuitApplicationsự kiện Apple, các ứng dụng nền nhận kAEQuitApplicationsự kiện Apple theo sau là KILLtín hiệu và trình nền nhận được TERMtín hiệu theo sau là KILLtín hiệu sau vài giây.


-4

Tắt máy ngay lập tức:

**sudo shutdown -h now**

Nếu bạn cảm thấy muốn trì hoãn việc tắt máy, bạn có thể sử dụng cú pháp lệnh sau:

**sudo shutdown -h +30**

(-h tham số đặt thời gian để tắt, trong đó (+) 30 phút để dừng hệ thống)


2
Thông tin được trình bày trong câu trả lời của bạn đã được bao gồm trong câu trả lời được chấp nhận và do đó không cần phải lặp lại những gì đã được đề cập và chấp nhận.
dùng3439894

-11

cũng hữu ích, để đăng xuất khỏi dấu nhắc dòng lệnh đầu cuối, nhập 'exit':

[host:~user]$ exit

10
Làm thế nào để điều này tắt, khởi động lại hoặc ngủ Mac?
bmike

Dù bằng cách nào, tôi thích Ctrl-Dđăng xuất hơn, vì nó không làm hỏng lịch sử dòng lệnh.
mwfearnley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.