Bagaimana cara mematikan komputer secara instan (1 hingga 5 detik) tanpa menggunakan sakelar / soket fisik?


17

Apakah ada perintah / program di mana saya dapat mematikan sistem saya secara instan (1 hingga 5 detik)?

Pembaruan (2015): Terima kasih kepada mereka yang telah menyarankan untuk mematikan menggunakan soket daya. : D

Pembaruan (2016): @technophile menyarankan agar saya menambahkan beberapa informasi ke pertanyaan yang menjelaskan sifat masalah - terutama skenario mana yang saya coba selesaikan. Inilah skenario yang diajukan pertanyaan ini beberapa tahun lalu.

Kami sedang membangun sistem untuk digunakan di ruang publik seperti (bandara, hotel dll). Orang-orang dapat menggunakan sistem itu untuk berselancar di internet, memeriksa email mereka atau bahkan pemesanan dll. Menggunakan kartu kredit mereka. Sistem yang dibangun memastikan bahwa pengguna kedua sama sekali tidak dapat memperoleh informasi (email, kartu kredit) dari pengguna sebelumnya dari sistem itu bahkan jika perangkat lunak semacam keyloggers entah bagaimana dapat diinstal. Bagaimana sistem memastikannya? Nah, detail tidak dapat dibagikan karena itu bukan info publik. tapi kami mengembangkan cara untuk selalu memiliki Sistem Operasi baru (seolah-olah itu baru diinstal) untuk pengguna baru sistem. Satu-satunya masalah adalah bahwa kami harus mematikan mesin dan membawanya lagi segera setelah pengguna pertama meninggalkan mesin.

Dan saya ingin shutdown itu menjadi cepat cepat (- itu sebabnya pertanyaannya) dan boot berikutnya menjadi sangat cepat juga untuk yang saya teliti dan mencoba sejumlah besar distribusi Linux dari Damn Small Linux ke Slackware ke Debian dll. Tetapi itu adalah cerita terpisah.


1
Karena kode tercepat adalah kode yang tidak berjalan, saya akan mengatakan cara tercepat untuk mematikan sistem adalah tidak menyalakannya. Jelaskan apa yang ingin Anda capai jika Anda membutuhkan jawaban spesifik.
Dmitry Grigoryev

2
@ Sam152 dinding yang mana?
choc

Apakah Anda ingin juga menentukan "tanpa merusak sistem saya", atau apakah itu tidak menjadi masalah?
Technophile

@ Technophile bukan kerusakan permanen pada sistem saya tentu saja. Tapi apa yang ada dalam pikiranmu?
choc

Tujuan saya adalah untuk memperjelas apa yang Anda minta dan apa yang Anda coba lakukan. Saya bekerja di bidang elektronik; Apakah "secara instan" berarti 1 detik? 1 ms? 1 kita? 1ns? Apakah Anda tidak sabar, atau ada kebutuhan khusus? Apa konsekuensi dari waktu shutdown 6 detik (misalnya)? Saya bekerja dengan sistem tertanam yang merusak kartu SD-nya jika shutdown melebihi 5 detik ketika tombol daya ditekan. Apa yang sedang kamu lakukan?
Technophile

Jawaban:


32
sudo shutdown -h now

9
Itu tidak akan mematikan sistem secara instan . ;)
Marcel Korpel

14
@Marcel Korpel: Seperti yang harus dilakukan tanpa merusak sistemnya;)
Felix

@ Feliks - Saya terus mendengar bahwa Linux adalah sistem yang sangat kuat, dan tidak dapat menangani "hard reboot" yang sama seperti yang dialami Windows saya? Akan mengejutkan;)
Gnoupi

2
@Gnoupi: Tidak ada OS yang dapat dibangun tanpa kerentanan untuk shutdown mendadak. Kalau tidak, jawaban untuk metode shutdown tercepat adalah dengan mencabut kabel daya.
harrymc

1
Beberapa versi sintaksnya berbeda. "sudo shutdown -g0 -y -i5" (Solaris). Dan tentu saja, hanya untuk membuatnya sulit, nilai yang tepat setelah "i" dapat berbeda untuk shutdown pada sistem yang berbeda. Saya percaya ini 0 pada banyak sistem lain untuk shutdown. Mendesah. Harus menyukai standar, begitu banyak untuk dipilih!
Brian Knoblauch

14

Saya tidak menyarankan untuk melakukan hal berikut jika Anda tidak dipaksa oleh alasan yang sangat khusus:

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

Itu kasar, brutal dan dapat dianggap setara dengan mencabut kabel listrik ...

Cara yang benar adalah shutdown -h nowdengan sudosebelum saat dibutuhkan.
Mungkin saya harus mengatakan halal ; lihat di bawah atau lebih baik tl; dr.


Beberapa kata lagi , alias Ceritanya, Bab I
Pada awalnya adalah init dan itu akan sampai akhir.

Seluruh Linux tergantung dari kasih sayang dari init [ 1 ] [ 2 ] . Meskipun demikian dan bukan tanpa rasa terima kasih dalam jumlah tertentu, ada saat di mana pengguna root Lord yang baik dapat mengkhianati cinta ini dan tiba-tiba killinit dengan perintah ( -9) yang tak terbantahkan .
( Kitab Etiket mengatur penghitungan, adipati dan marquise pengguna untuk meminta sebelum a sudo).

Kemudian beberapa penyihir membuat mantra untuk melindungi init (dari Kitab man 2 init)

Satu-satunya sinyal yang dapat dikirim ke ID proses 1, proses init, adalah mereka yang init secara eksplisit telah menginstal penangan sinyal. Hal ini dilakukan untuk memastikan sistem tidak diturunkan secara tidak sengaja.

(Mata-mata kami melaporkan [ U1 ] bahwa init akan menangani 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
Jadi pengguna root Lord yang baik mempelajari berita dan mengubah perintah di kill -ABRT 1atau kill -SEGV 1yang biasanya menghasilkan sebuah kernel panik dan dump inti.

Ini bekerja karena init adalah proses pertama yang dijalankan dan mengambil nomor PID 1 [ 2b ] .

Ini tidak aman, tidak bijaksana dan Anda merasa itu adalah pertanda pertanda buruk dan kutukan tetapi jika Anda tidak bisa secara material meletakkan tangan dan mencabutnya ...

Kutukan : itu tidak akan menulis di log, tidak akan membunuh semua proses & menunggu berakhirnya, itu tidak akan menulis pada HDD dengan benar memperbarui inode juga tidak akan meng-unmount sistem file; bahkan tidak keberatan itu akan menyimpan opsi jendela grafis dan sejarah shell, dan banyak lainnya di luar imajinasi kita ... seperti yang kita katakan setara dengan mencabut chord daya, atau baterai jika laptop.


Cara yang benar
"Non nobis, Domine, non nobis, sed nomini tuo da gloriam.", Templar ksatria moto.
Cara yang sah (benar) adalah dengan menggunakan shutdown[ 3 ]

sudo shutdown -h now

shutdown mengatur agar sistem diturunkan dengan cara yang aman. Semua pengguna yang masuk diberitahukan bahwa sistem sedang turun dan ...

tetapi dengan -h nowmereka tidak akan memiliki cukup waktu untuk melakukan begitu banyak ...


Beberapa kata lagi , alias Ceritanya, Bab II
Suatu ketika beberapa langkah logis terasa dari langit di atas orang-orang unix:

Setelah proses sistem terbunuh dan sistem file telah dilepas, sistem berhenti / mati atau reboot secara otomatis. Ini dilakukan dengan menggunakan perintah berhenti atau reboot, yang menyinkronkan perubahan ke disk dan kemudian melakukan penghentian / matikan atau boot ulang yang sebenarnya. [ 4 ]

Memang, saat ini, kita tidak percaya lagi pada adanya tiga Moirai [ 5 ] dari dunia Linux , reboot, poweroffdan halt[ 6 ] : yang ilmu pengetahuan modern dari ls -l $(which poweroff halt reboot)dan salah man reboot, menyebar baru cahaya pada zaman kegelapan ini dan mengungkapkan kami bahwa hanya ada satu perintah yang benar yang mem-parsing semua opsi mereka sehingga kita akhirnya bebas untuk meminta tindakan yang bertentangan dengan nama perintah mereka! ( halt -patau reboot -puntuk poweroff, shutdown -runtuk reboot...)

Sekarang semua tampak jelas dan nyaman untuk semua, rumor mengklaim [ 7 ] yang di bawah dari toolset systemd [ 8 ] revolusi dilakukan meninggalkan menyadari seluruh overworld . Berkat pasukan kompatibilitas mundur kita tidak melihat sama sekali bahwa reboot, poweroff, berhenti [ 6 ] dan bahkan telinit [ 9 ] dan shutdown [ 3 ] semuanya sudah terikat pada systemctl raja baru [ 10 ]. Tolong dengarkan seluruh cerita dari suara asli JdeBP The Bard [ 9 ] karena saya tidak punya nafas lagi.

Jika Anda adalah pengikut kultus Ubuntu, Anda mungkin masih tetap sadar untuk sementara waktu dari semua klaim [ 11 ] .


Tengah Bumi halt -f, init, telinit, systemctl
Mencari solusi yang lebih cepat dari yang benar tetapi juga bijaksana.

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

Bahwa Anda berada di bawah systemd atau tidak Anda harus dapat menghentikan komputer tanpa menerapkan semua prosedur shudown yang benar (dan lebih cepat):

  1. halt -f: menentukan opsi-f (perhatikan bahwa Anda harus -fmenghindari prosedur mematikan) dengan perintah di atas, dengan sudo poweroff -fatau bahkan mungkin dengan sudo reboot -f -h. Memang kita dapat membaca dari man reboot(dan setara) tentang perlunya menentukan opsi -funtuk menghindari panggilan shutdown:

    Ketika dipanggil dengan --force atau ketika di runlevel 0 atau 6, alat ini memanggil reboot (2) system call itu sendiri (dengan argumen REBOOTCOMMAND yang disahkan) dan langsung reboot sistem .

    Kalau tidak, ini hanya memanggil alat shutdown (8) dengan argumen yang sesuai tanpa melewati argumen REBOOTCOMMAND.

    -f, --force
    Tidak menjalankan shutdown (8) dan sebagai gantinya melakukan tindakan yang sebenarnya Anda harapkan dari namanya .

  2. Selain itu Anda dapat menggunakan telinit [ 2b ] (atau initlangsung)

    sudo telinit 0    # or 6
    

    untuk memberitahu init untuk mengubah runlevel ... tetapi jika demikian mengapa tidak membunuhnya secara langsung?

  3. Di bawah systemd Anda dapat menggunakan opsi ganda yang tidak bijaksana --force --force

    systemctl --force --force poweroff  
    

    Membaca dari manual systemctl [ 10 ]

    -f, --force
    Ketika digunakan dengan mengaktifkan, timpa setiap symlink yang saling bertentangan.
    Ketika digunakan dengan halt, poweroff,reboot atau kexec, mengeksekusi operasi yang dipilih tanpa mematikan semua unit. Namun, semua proses akan dimatikan secara paksa dan semua sistem file dilepas atau di-read-only. Karenanya ini adalah opsi yang drastis tetapi relatif aman untuk meminta reboot segera. Jika --force ditentukan dua kali untuk operasi ini, mereka akan segera dieksekusi tanpa menghentikan proses apa pun atau melepas sistem file apa pun. Peringatan: menentukan - memaksa dua kali dengan salah satu dari operasi ini dapat mengakibatkan hilangnya data.

Ps> Ambil inspirasi tentang varian dari ekor JdeBP The Bard [ 7 ] .


9

Anda dapat mematikan mesin segera tanpa menyinkronkan disk dengan menulis "o" ke / proc / sysrq-trigger sebagai root.

Sebagai skrip shell akan terlihat seperti

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

Jika Anda memiliki izin pada / proc / sysrq-trigger, Anda tidak harus mengaktifkannya melalui sysctl. Opsi itu hanya memengaruhi pemicuan oleh keyboard.

Saya tidak merekomendasikan melakukan ini pada mesin dengan sistem file yang ingin Anda baca nanti.

Saya menggunakan ini di Google Compute Engine untuk menyembelih templated instances tepat sebelum tanda sepuluh menit untuk memaksimalkan efektivitas biaya pekerjaan kluster, ini bekerja dengan baik.


5
Ini adalah jawaban terbaik untuk pertanyaan ini. OP dengan jelas menyatakan dia ingin mematikan sistem dengan cara yang sama seperti jika dicabut dari listrik, mereka tidak peduli dengan kerusakan atau "melakukannya dengan benar". Saya tidak mengerti mengapa tidak ada yang bisa mengerti itu.
Petr

1
balih-alih oreboot (relevan karena pertanyaan diperbarui).
Kamil Maciorowski




2

Tahan tombol daya selama sekitar 4 detik, ini cukup cepat.


1
Jika melakukannya, membalik saklar daya sebenarnya lebih cepat;)
Gnoupi

Itu sama dengan metode shutdown lainnya, dengan asumsi bahwa OS melakukan manajemen daya.
harrymc

1
Jika Anda benar-benar tidak bisa menunggu beberapa detik, dan akan mematikan daya, gunakan sistem file jurnal seperti ext3 / ext4 sehingga Anda tidak kehilangan banyak data karena penulisan yang tidak tertulis.
CarlF

Tidak mencari cara non-program / non-software untuk melakukan shutdown, jika tidak, saran @Gnoupi jauh lebih cepat. ;)
choc

2

Pada distribusi linux tertentu, shutdown menawarkan opsi -n. (Lihat shutdown pria ). Distribusi tertentu (seperti ubuntu yang menggunakan pemula bukan sysvinit) tidak mendukung benderanya, dan bender ini (seperti yang dapat dipelajari dari halaman manual) bukan tanpa risiko. Meskipun saya telah menggunakan ini selama bertahun-tahun (di laptop saya saya tidak peduli bahwa semua daemon dihentikan dengan benar, itu hanya ingin semuanya terbunuh dan diskcache saya memerah) (lebih cepat daripada shutdown biasa, dan lebih aman daripada menarik pasang (dan teman)). Anda dapat melihat apakah ini menyelesaikan masalah Anda.


2

Saya menggunakan skrip kecil ini untuk mematikan sistem. Sebenarnya ini digunakan untuk lelucon pada mesin "prototyping": "Hei Bung, mari kita lihat apa yang mengagumkan. Dia lakukan!"

#!/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.

(Skrip ini meniru sama dengan memukul Alt+ SysRq+u / s/ oseperti yang dijelaskan sebelumnya.) Tentu saja saya tidak menyebabkan pemutusan sistem yang tidak normal (tabel mysql, dll mungkin macet), jadi gunakan hanya pada mesin dummy. Catatan: Sinkronisasi mungkin membutuhkan waktu. Saya telah melihat bahwa jika sistem memiliki banyak memori bebas (untuk cache) dan Anda menyalin banyak file ke drive pen, sinkronisasi memerlukan lebih banyak waktu, tetapi saya merekomendasikannya bahkan untuk lelucon.

Sunting: Lebih baik menggunakan syncdaripada menulis 's' ke sysrq-trigger: menulis 's' tidak akan memblokir eksekusi skrip, jadi setelah meminta cache untuk ditulis ke dalam disk, mesin akan segera mati. Berbeda dengan syncperintah, syncakan kembali setelah proses penulisan selesai. Jadi eksekusi skrip akan diblokir, sampai cache pembilasan selesai.


1
Bukankah kamu seharusnya sebelum kamu? Juga, sebagai satu lingkaran:SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done
Que Quotion
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.