Mac'imi Kapatmak, Yeniden Başlatmak ve Uyutmak için Terminal Komutunu Kullanma?


120

Mac'imdeki çözümleri ele almak için Terminal'i alternatif bir yol olarak kullanmakla daha fazla ilgileniyorum. "OSX'i kapatmanın / yeniden başlatmanın daha iyi bir yolu var mı?" Başlıklı bu soruyu gördüm. .

Bu nedenle bilmek istiyorum:

Sadece Terminal komutunu kullanarak Mac'imi nasıl kapatırım, yeniden başlat ve uyu?


yeniden başlatma için yeniden başlatma da çalışır.
atilkan

Yanıtlar:


147

Sonra bulunduğunuz komut kapanıyor . Bu, tüm kullanıcılara makinenin kapatılacağını bildirir ve tüm uygulamalara dosyaları kapatmasını vb.

Komut, Mac'in kapatılması, yeniden başlatılması veya uykuya alınması için -h, -r veya -s parametresini alır.

Komut root olarak çalıştırılmalıdır, bu yüzden sudo kullanmanız gerekir.

örneğin makineyi hemen yeniden başlatmak için

sudo shutdown -r now

örneğin, makineyi 60 dakika içinde kapatmak için

sudo shutdown -h +60

Yorumlardan ele alınması gereken iki şey var

Kapatma işlemi, o zaman açık dosyaları kaydetme vb. İle başa çıkması gereken tüm işlemlere bir imza göndererek yapılır. Çıkmazlarsa, yanıt vermeleri için ölmeye zorlayan bir SIGKILL gönderilir. Sinyaller normal anahtar mesaj kuyruğu üzerinden gönderilmez, bu yüzden Uygulamaların menüden çıktıktan sonra gelen kodu ayrı ayrı ele alması gerekir. İyi bir uygulama her ikisinden de ortak kodu çağırmalıdır.

Bu diğer cevap menü seçeneklerine bastığınızda nasıl kapatılacağını gösterir. Ancak, uygulamaların bu kapatmayı iptal edebileceğini unutmayın


2
Belki de soru ve bu cevapla biraz ilgisiz, ama bunun için ne de Mac’i Terminal’den kilitlememde bana yardımcı oluyor, Windows'ta Winkey + L’ye çarpmak gibi /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend. Benim .bash_profile alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
dosyamdaki

Gerçekten "tüm uygulamalara dosyaları kapatma vb." Diyor mu? Sadece her şeyi öldürdüğünü mü düşündüm? Man sayfası 1998'den itibaren BSD - Apple, macOS yazılımına hoşça konuşmak için komutu güncelledi mi? İşler askıda kaldıysa kullanışlıdır, ancak sistem iyi çalışıyorsa, oturum açma işleminin senet yapması gerektiğini söylemek daha kibar olacaktır.
j-beda

@ j-beda Bkz. Apple doc developer.apple.com/legacy/library/documentation/Darwin/… - İlk önce, uygulamaların bir SIGKILL almadan önce uğraşması gereken bir SIGTERM gönderir. Giriş Penceresi / GUI üzerinden yapmak için diğer cevaba bakınız. Aslında giriş penceresi nasıl yapılır?
user151019

Unix "kapatma" nın normal Mac GUI kapatma işleminin yaptığı her şeyi yapmadığından, bu nedenle Apple'ın doğrudan kendi yazılımında kullanmadığı ölçüde, ancak en azından bazı şeyleri başlatmadan önce eminim. onu doğrudan çağırmak için bir dezavantaj var. "Loginwindow" uygulamasının GUI giriş penceresinde olmasa bile kullanılabileceğine ve komut satırı "osascript" aracıyla çalıştırılabileceğine inanıyorum. Ancak yanılmaz değildir, bu yüzden bir şekilde "kapanmayı" (veya sanırım belirli işlemlere bireysel öldürmeler göndermeyi) çağırmanız gerekebilir.
j-beda

Normal bir kapanışta olduğu gibi, sinyal mekanizması Apps mesaj kuyruğuna bir mesaj vermiyor ancak uygulamalar hala bununla başa çıkmalı. yani, düzgün çalışmıyorsa, bu Apps’in hatası. GUI'deki bazı denemeler için diğer cevaba bakınız. Ancak, genellikle ölmeyi reddeden ve bırakma işlemini iptal eden bir uygulama olduğunu görüyorum, bu nedenle kapatma tek planlı bir yoldur
user151019

94

Onay iletişim kutusu göstermeden kapanma:

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

Onay iletişim kutusunu gösterdikten sonra kapanır:

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

Onay iletişim kutusu göstermeden yeniden başlat:

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

Onay iletişim kutusunu gösterdikten sonra yeniden başlat:

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

Onay iletişim kutusu göstermeden oturumu kapat:

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

Bir onaylama iletişim kutusu gösterdikten sonra oturumu kapatın:

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

Uyu ( pmset):

pmset sleepnow

Uyumaya git (AppleScript):

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

Ekranları uyku moduna geçirin (10.9 ve üstü):

pmset displaysleepnow

Apple olayları için dört harfli kodlar içinde listelenmiştir AERegistry.h.

Yukarıdaki tüm Sistem Olayları komutları, Apple olaylarını loginwindowişleme gönderir . loginwindowoturumu kapattığınızda, yeniden başlattığınızda, kapattığınızda veya Mac'i normal bir şekilde uyku moduna geçirdiğinizde yukarıdaki aynı Apple olayları gönderilir. Bkz Programlı neden yeniden, kapatma ve / ya da çıkış Teknik Q ve A QA1134 .

Göre man shutdown, shutdown -h nowve shutdown -r nowgönder işleyen TERMbir takip sinyali KILLsinyali.

Göre Guide Programlama Daemons ve Hizmetlerin sen söyleyince, loginwindowçıkış yapmak için, ani fesih destekleyen süreçler bir gönderilir KILLsinyali ve ani fesih desteklemeyen süreçler farklı şekillerde feshedilir: Kakao uygulamaları almak applicationShouldTerminate:temsilci yöntemi, ön plan uygulamaları almak kAEQuitApplicationElma olayı, arka plan uygulamaları almak kAEQuitApplicationbir takip Elma olayı KILLsinyali ve cinleri bir alacak TERMbir takip sinyali KILLbirkaç saniye sonra sinyal.


-4

Hemen kapanma:

**sudo shutdown -h now**

Kapanmaya bir gecikme koymak istiyorsanız, bunun yerine aşağıdaki komut sözdizimini kullanabilirsiniz:

**sudo shutdown -h +30**

(-h parametresi kapanma zamanını ayarlar, burada (+) sistemi durdurmak için 30 dakika)


2
Cevabınızda sunulan bilgiler zaten kabul edilen cevaba dahil edilmiştir ve hali hazırda bahsedilen ve kabul edilenleri tekrarlamaya gerek yoktur.
user3439894

-11

ayrıca, terminal komut satırı isteminden çıkmak için 'exit' yazın:

[host:~user]$ exit

10
Bu ne şekilde kapanıyor, Mac'i yeniden başlatıyor veya uyutuyor?
bmike

Her iki durumda da Ctrl-D, komut satırının tarihini sınırlamadığı için oturumu kapatmayı tercih ederim .
mwfearnley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.