Fiziksel bir anahtar / soket kullanmadan bir bilgisayarı anında (1 ila 5 saniye) nasıl kapatabilirim?


17

Sistemimi anında kapatabileceğim herhangi bir komut / program var mı (1 ila 5 sn)?

Güncelleme (2015): Priz kullanarak kapatılmasını önerenlere teşekkür ederiz. : D

Güncelleme (2016): @technophile, sorunun doğasını açıklayan soruya bazı bilgiler eklememizi önerdi - esas olarak hangi senaryoyu çözmeye çalışıyordum. İşte bu sorunun birkaç yıl önce sorulduğu senaryo.

Kamusal alanlarda (havaalanları, oteller vb.) Konuşlandırılacak bir sistem kuruyorduk. İnsanlar bu sistemi internette gezinmek, e-postalarını kontrol etmek ve hatta kredi kartlarını kullanarak rezervasyon yapmak için kullanabilirler. Sistem, ikinci bir kullanıcının, keylogger'lar bir tür yazılımlar bir şekilde kurulsa bile, o sistemin önceki kullanıcısının hiçbir bilgisini (e-posta, kredi kartı) alamayacağından emin oluyordu. Sistem bundan nasıl emin oldu? Genel bilgi olmadığı için ayrıntılar paylaşılamaz. ancak sistemin yeni bir kullanıcısı için her zaman yeni bir İşletim Sistemine sahip olmanın bir yolunu geliştirdik (yeni kurulmuş gibi). Tek sorun, ilk kullanıcı makineden ayrılır ayrılmaz makineyi kapatıp tekrar büyütmemiz gerekti.

Ve bu kapanmanın anında hızlı olmasını istedim (- bu yüzden soru) ve bir sonraki önyükleme de çok hızlı olmalı ve Damn Small Linux'tan Slackware'den Debian'a kadar çok sayıda Linux dağıtımını araştırdım ve denedim. ayrı bir hikaye.


1
En hızlı kod çalışmayan kod olduğundan, bir sistemi kapatmanın en hızlı yolunun onu açmak olmadığını söyleyebilirim. Belirli bir cevaba ihtiyacınız varsa neyi başarmaya çalıştığınızı açıklayın.
Dmitry Grigoryev

2
@ Sam152 hangi duvarda?
Usman

Ayrıca "sistemime zarar vermeden" belirtmek mi istediniz, yoksa bu bir endişe kaynağı değil mi?
Technophile

@Technophile, sistemime kalıcı bir zarar vermedi elbette. Ama aklında ne var?
Usman

Amacım ne istediğini ve ne yapmaya çalıştığını açıklığa kavuşturmak. Elektronikte çalışıyorum; "anında" ne demek? 1 ms? 1us? 1ns? Sadece sabırsız mısınız yoksa özel bir ihtiyaç var mı? 6 saniyelik kapanma süresinin sonuçları nelerdir? Güç düğmesi basılı tutulduğunda kapatma 5 saniyeyi aşarsa SD kartını bozan gömülü bir sistemle çalışıyorum. Ne yapıyorsun?
Technophile

Yanıtlar:


32
sudo shutdown -h now

9
Bu bir sistemi anında kapatmaz . ;)
Marcel Korpel

14
@Marcel Korpel: Sistemine zarar vermeden yapılması gerektiği gibi;)
Felix

@Felix - Linux'un çok sağlam bir sistem olduğunu duymaya devam ediyorum ve Windows'umun katlandığı aynı "yeniden başlatma" ile baş edemiyor mu? Şaşırtıcı olurdu;)
Gnoupi

2
@Gnoupi: Ani kapanmaya karşı bir güvenlik açığı olmadan hiçbir işletim sistemi kurulamaz. Aksi takdirde, en hızlı kapatma yönteminin cevabı güç kablosunu çekmektir.
harrymc

1
Bazı sürümler sözdizimi farklıdır. "sudo shutdown -g0 -y -i5" (Solaris). Ve elbette, sadece zorlaştırmak için, "i" yi izleyen kesin değer farklı sistemlerde kapatma için farklı olabilir. Kapatmak için diğer birçok sistemde 0 olduğuna inanıyorum. İç çekmek. Standartları sevmeliyim, aralarından seçim yapabileceğiniz çok şey var!
Brian Knoblauch

14

Gerçekten özel nedenlerle zorlanmıyorsanız aşağıdakileri yapmanızı önermiyorum:

kill -SEGV 1   # should generate a core dumps and kernel panic
kill -ABRT 1   # should generate a core dumps and kernel panic
kill -9 1      # On old systems worked nowadays not

Kaba, acımasız ve güç kablosunu çıkarmanın yakın bir eşdeğeri olarak düşünülebilir ...

Doğru yolu olduğu shutdown -h nowile sudogerektiğinde önce.
Belki de yasal yolu söylemeliyim ; aşağıya veya daha iyiye bakınız ; dr.


Bazı sözler , aka Hikaye, Bölüm I
Başlangıçta başlangıçtı ve en sonuna kadar olacak.

Tüm Linux , initin sevgi dolu bakımına bağlıdır [ 1 ] [ 2 ] . Bununla birlikte, belirli bir nankörlük olmadan, iyi Lord kök kullanıcısının bu sevgiye ihanet edebileceği ve aniden kontrol edilemez ( ) bir düzenle başlayabileceği bir zaman vardı . ( Etiquette Kitabı, kullanıcıların a'dan önce çağırmaları için sayımlar, dükler ve markizler için reçete eder ). kill-9
sudo

Sonra bazı sihirbazlar (Kitabı'ndan init korumak için bir cazibe yapılan man 2 init)

İşlem kimliği 1'e (init işlemi) gönderilebilen tek sinyaller, init'in açıkça sinyal işleyicileri kurduğu sinyallerdir. Bu, sistemin yanlışlıkla düşürülmemesini sağlamak için yapılır.

(Casuslarımız rapor [ U1 ] init idare edeceğini 1 HUP 6 ABT 11 SEGV 15 SÜRE 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
Yani iyi Rab root haberlerini öğrenmek ve komutunu değiştirmek kill -ABRT 1veya kill -SEGV 1o genellikle oluşturmak çekirdek panik ve çekirdek dökümü.

Çalışır, çünkü init çalıştırılan ilk işlemdir ve 1 numaralı PID numarasını alır [ 2b ] .

Bu güvensiz, akılsız ve kötü omen ve bir lanetin müjdecisi olduğunu hissediyorsunuz, ancak ellerinizi maddi olarak koyamaz ve fişini çekemezseniz ...

Lanet : günlükte yazmayacak, tüm işlemleri öldürmeyecek ve bitmesini beklemeyecek, dosya sistemlerini sökmeyecek şekilde inode'ları düzgün bir şekilde güncelleyerek HDD'ye yazmayacak; grafik pencerelerinin ve kabuk geçmişlerinin seçeneklerini ve hayal gücümüzün ötesinde pek çok şeyi kurtaracağını bile düşünmüyoruz ... dediğimiz gibi güç akorunu veya bir dizüstü bilgisayarsa pili çıkarmanın yakın bir eşdeğeri.


Doğru yol
"Nobis olmayan, Domine, nobis olmayan, sed nomini tuo da gloriam.", Templar şövalyeleri sloganı. Yasal (doğru) bir şekilde kullanmaktır [ 3 ]
shutdown

sudo shutdown -h now

shutdown, sistemin güvenli bir şekilde indirilmesini sağlar. Oturum açan tüm kullanıcılara sistemin çöktüğü bildirilir ve ...

ama -h nowbu kadar çok şey yapmak için yeterli zamanları olmayacak ...


Bazı kelimeler daha , aka Hikaye, Bölüm II
Bir zamanlar bazı mantıksal adımlar gökten unix insanlar üzerinde hissetti:

Sistem süreçleri öldürüldükten ve dosya sistemleri kaldırıldıktan sonra, sistem durur / kapanır veya otomatik olarak yeniden başlatılır. Bu, değişiklikleri disklerle senkronize eden ve daha sonra gerçek durma / kapatma veya yeniden başlatma işlemini gerçekleştiren durma veya yeniden başlatma komutu kullanılarak yapılır. [ 4 ]

Gerçekten de, günümüzde, üç Moirai varlığına artık güvenmiyorum [ 5 ] arasında Linux dünyasında , reboot, poweroffve halt[ 6 ] : Modern bilim arasında ls -l $(which poweroff halt reboot)ve biri man reboot, bu karanlık yaş yayılır yeni hafif ve bizi açığa tüm seçeneklerini ayrıştıran tek bir gerçek komutun mevcut olması, böylece komutlarının adlarıyla çelişen eylemler istemekte özgürüz! ( halt -pVeya reboot -piçin poweroff, shutdown -riçin reboot...)

Şimdi bütün herkes için açık ve rahat görünüyordu ki söylentiler iddia [ 7 ] o yeraltı ait systemd araç seti [ 8 ] bir devrim bütün habersiz bırakarak gerçekleştirildi Overworld . Geriye dönük uyumluluk şimleri ordusu sayesinde , yeniden başlatma, güç atma, durma [ 6 ] ve hatta telinit [ 9 ] ve kapanma [ 3 ] ' ün zaten yeni kral systemctl'e [ 10 ] bağlı olduğunu fark etmedik.. Lütfen hikayenin tamamını JdeBP The Bard'ın [ 9 ] orijinal sesinden dinleyin çünkü artık nefesim yok.

Eğer Ubuntu kültünün takipçileri iseniz, tüm bu iddiaların bir süre daha farkında olabilirsiniz [ 11 ] .


Orta Toprak halt -f, init, telinit, systemctl
hızlı, doğru olandan ama aynı şekilde akıllıca çözüm aranıyor.

systemctl --force --force poweroff  # the most close to kill -9 1 
systemctl --force poweroff          # rough but still safe
sudo halt -f                                       # rough
sudo telinit 0        # or 6                       # safe
kill -SIGINT 1        # cause reboot   as the reboot command
kill -SIGRTMIN+4 1    # cause shutdown as the halt command

Systemd altında olup olmadığınızı, tüm doğru shudown yordamlarını (ve çok daha hızlı) çağırmadan bilgisayarı durdurabilmeniz gerekir:

  1. halt -f: yukarıdaki komutla ( hatta kapatma prosedüründen kaçınmanız gerektiğini unutmayın) seçeneği belirleme,-f hatta ile veya hatta ile . Gerçekten de , kapatmayı çağırmaktan kaçınma seçeneğini belirtme ihtiyacını (ve eşdeğerlerini) okuyabiliriz :-fsudo poweroff -fsudo reboot -f -hman reboot-f

    --Force ile çağrıldığında veya 0 veya 6 çalışma seviyesinde olduğunda, bu araç reboot (2) sistem çağrısını başlatır (REBOOTCOMMAND bağımsız değişkeni geçerek) ve sistemi doğrudan yeniden başlatır .

    Aksi takdirde bu, REBOOTCOMMAND bağımsız değişkenini geçmeden uygun argümanlarla shutdown (8) aracını çağırır .

    -f, --force
    Shutdown (8) işlevini çağırmaz ve bunun yerine addan beklediğiniz fiili eylemi gerçekleştirir .

  2. Ayrıca telinit [ 2b ] (veya initdoğrudan)

    sudo telinit 0    # or 6
    

    init'e çalışma seviyesini değiştirmesini söylemek ... ama eğer öyleyse neden doğrudan öldürmüyorsun?

  3. Systemd altında unwise double seçeneğini kullanabilirsiniz --force --force

    systemctl --force --force poweroff  
    

    Systemctl kılavuzundan okuma [ 10 ]

    -f, --force
    enable ile kullanıldığında, var olan çakışan sembollerin üzerine yaz.
    Birlikte kullanıldığında halt, poweroff,reboot veya kexec, tüm birimleri kapatmadan Seçilen işlemi yürütmek. Ancak, tüm işlemler zorla öldürülecek ve tüm dosya sistemleri sökülecek veya salt okunur olarak yeniden eklenecektir. Bu nedenle, hemen yeniden başlatma istemek için sert ama nispeten güvenli bir seçenektir. Bu işlemler için --force iki kez belirtilirse, herhangi bir işlemi sonlandırmadan veya dosya sistemlerini ayırmadan hemen yürütülürler. Uyarı: - bu işlemlerin herhangi biriyle iki kez zorla belirtilmesi veri kaybına neden olabilir.

Ps> JdeBP kuyruk Bard [ 7 ] varyantları hakkında ilham alın .


9

Kök olarak / proc / sysrq-trigger'a "o" yazarak diskleri senkronize etmeden makineyi hemen kapatabilirsiniz.

Kabuk betiği gibi

#!/bin/sh
echo o >/proc/sysrq-trigger

/ Proc / sysrq-trigger üzerinde izniniz varsa, sysctl aracılığıyla etkinleştirmeniz gerekmez. Bu seçenek yalnızca klavye ile tetiklemeyi etkiler.

Bunu daha sonra okumak istediğiniz herhangi bir dosya sistemine sahip bir makinede yapmanızı önermiyorum.

Bunu Google Compute Engine'de, küme işlerinin maliyet etkinliğini en üst düzeye çıkarmak için ayarlanmış örnekleri on dakika işaretinden önce kesmek için kullanıyorum, harika çalışıyor.


5
Bu sorunun en iyi cevabı bu. OP, sistemi güçten çıkarılmış gibi kapatmak istediğini, hasara ya da "düzgün bir şekilde yapmaya" aldırmadıklarını açıkça belirtiyor. Kimsenin bunu neden anlayamadığını anlamıyorum.
Petr

1
boyeniden başlatmak yerine ( soru güncellendiğinden beri alakalı).
Kamil Maciorowski

7

Magic SysRq tuş bileşimini kullanmanız gerekir REISUB.

Benden sonra tekrar et: " Fil yetiştirmek çok sıkıcı ... "


2
Hayır. REISUB yeniden başlatacak. REISUO kapanacaktır. Veya basitçe O.
Benoit


3

Başka bir SE sitesinden alınmıştır:

Alt+ SysRq+ Banında yeniden başlatma ve Alt+ SysRq+ Oanında kapanmadır.


Referans: Burada


2
referansı kaçırdınız ve cevabınızı vermişsiniz gibi görünüyor, o zaman oyumu geri alacağım
Francisco Tapia

Bu orijinal yanıttır: askubuntu.com/a/56072
cst1992

2

Güç tuşunu yaklaşık 4 saniye basılı tutun, oldukça hızlı.


1
Bunu yaparsanız, güç anahtarını çevirmek aslında daha hızlıdır;)
Gnoupi

Bu, işletim sisteminin güç yönetimi yaptığını varsayarsak, diğer kapatma yöntemleriyle aynıdır.
harrymc

1
Aslında birkaç saniye bekleyemiyorsanız ve gücü öldürecekseniz, ext3 / ext4 gibi bir günlük kaydı dosya sistemi kullanın, böylece yazılı olmayan yazılar nedeniyle fazla veri kaybetmezsiniz.
CarlF

Kapatmayı gerçekleştirmenin program dışı / yazılım dışı bir yol aramaması aksi halde @Gnoupi önerisi çok daha hızlıdır. ;)
Usman

2

Belirli linux dağıtımlarında, kapatma -n seçeneğini sunar. (Bkz. Adam kapatma ). Bununla birlikte, bazı dağıtımlar (sysvinit yerine uptart kullanan ubuntu gibi) bayrağını desteklemez ve bu bayraklar (manpageden öğrenilebileceği gibi) risksiz değildir. Bunu yıllardır kullanmama rağmen (dizüstü bilgisayarımda tüm cinlerin düzgün bir şekilde sonlandırılması umurumda değil, sadece her şeyin öldürülmesini ve disk belleğimin yıkanmasını istiyor) (düzenli bir kapanmadan daha hızlı ve çekmekten daha güvenli fiş (ve arkadaşlar)). Bunun sorununuzu çözüp çözmediğini görebilirsiniz.


2

Bu küçük komut dosyasını sistemi kapatmak için kullandım. Aslında bunu bir "prototipleme" makinesinde şaka yapmak için kullandı: "Hey dostum, bakalım o harika .sh ne yapıyor!"

#!/bin/bash
echo 1 > /proc/sys/kernel/sysrq-trigger; #enables sysrq triggers
echo u > /proc/sysrq-trigger # remount the system as ready only
#edited# echo s > /proc/sysrq-trigger # sync all write-pending data to disk
sync
echo o > /proc/sysrq-trigger # shut off the system power.

(Bu komut dosyası , daha önce açıklandığı gibi Alt+ SysRq+ u/ s/ isabetiyle aynı şekilde taklit edilir o.) Elbette anormal bir sistem sonlandırmasına neden olmuyorum (mysql tabloları, vb. Çökebilir), bu yüzden sadece kukla makinelerde kullanın. Not: Senkronizasyon biraz zaman alabilir. Sistemin çok fazla boş belleği varsa (önbellek için) ve bir sürü dosyayı bir kalem sürücüsüne kopyalarsanız, senkronizasyonun daha fazla zaman aldığını, ancak şaka için bile tavsiye ettiğini gördüm.

Düzenleme: sync's' yazmak yerine kullanmak daha iyidir sysrq-trigger: 's' yazmak komut dosyasının yürütülmesini engellemez, bu nedenle önbelleğin diske yazılmasını istedikten sonra makine hemen kapanacaktır. syncKomutun aksine sync, yazma işlemi tamamlandıktan sonra geri döner. Böylece, önbellek temizleme işlemi bitinceye kadar komut dosyası yürütme engellenir.


1
'U'dan önce olmalısın? Ayrıca, bir döngü olarak:SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done
Que Quotion 28:17
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.