物理的なスイッチ/ソケットを使用せずにコンピューターを即座にシャットダウンする方法(1〜5秒)


17

システムを即座にシャットダウンできるコマンド/プログラムはありますか(1〜5秒)。

更新(2015):電源ソケットを使用して電源を切ることを提案してくださった方に感謝します。:D

更新(2016): @technophileは、問題の性質を説明する質問に情報を追加することを提案しました-主にどのシナリオを解決しようとしていましたか。ここに、この質問が数年前に尋ねられたシナリオがあります。

(空港、ホテルなど)のような公共スペースに展開するシステムを構築していました。インターネットサーフィン、電子メールのチェック、クレジットカードを使用した予約などに、このシステムを使用できます。構築されたシステムは、キーロガーのようなソフトウェアが何らかの形でインストールされたとしても、そのシステムの前のユーザーの情報(電子メール、クレジットカード)を決して取得できないようにしました。システムはどのようにそれを確認しましたか?それは公開情報ではないため、詳細は共有できません。しかし、システムの新しいユーザーのために常に新しいオペレーティングシステムを(新しくインストールされたように)使用する方法を開発しました。唯一の問題は、最初のユーザーがマシンを離れるとすぐにマシンをシャットダウンし、再び起動する必要があることでした。

そして、私はそのシャットダウンを即座に高速にしたかったので(質問です)、次の起動も非常に高速にしたいと思いました。別の話。


1
最速のコードは実行されないコードなので、システムをシャットダウンする最速の方法は電源を入れないことです。具体的な答えが必要な場合、達成しようとしていることを説明します。
ドミトリーグリゴリエフ

2
@ Sam152どの壁?
ウスマン

「システムに損傷を与えることなく」を指定したいのですか、それとも心配ではありませんか?
テクノフィル

もちろん、@ Technophileは私のシステムに永続的なダメージを与えるものではありません。しかし、あなたは何を念頭に置いていますか?
ウスマン

私の目的は、あなたが何を求めているのか、何をしようとしているのかを明確にすることです。私はエレクトロニクスで働いています。「瞬時に」は1秒を意味しますか?1ms?1us?1ns?あなたは単にせっかちですか、それとも特定のニーズがありますか?(たとえば)6秒のシャットダウン時間の結果は何ですか?電源ボタンが押されているときにシャットダウンが5秒を超えると、SDカードが破損する組み込みシステムを使用しています。何してるの?
テクノフィル

回答:


30
sudo shutdown -h now

9
それはシステムを即座にシャットダウンしません。;)
マルセル・コーペル

14
@Marcel Korpel:自分のシステムに損傷を与えることなく、できる限り即座に;)
Felix

@Felix-Linuxは非常に堅牢なシステムであり、Windowsが耐えたのと同じ「ハードリブート」を処理できないと聞いています。驚くだろう;)
グヌーピ

2
@Gnoupi:突然のシャットダウンに対する脆弱性がなければ、OSを構築できません。それ以外の場合、最速のシャットダウン方法の答えは、電源コードを引っ張ることです。
harrymc

1
一部のバージョンでは構文が異なります。「sudo shutdown -g0 -y -i5」(Solaris)。そしてもちろん、難しくするために、「i」に続く正確な値は、システムごとのシャットダウンで異なる場合があります。シャットダウンする他の多くのシステムでは0であると思います。はぁ。標準が大好きだから、たくさんの選択肢があります!
ブライアン

14

本当に特別な理由で強制されていない場合は、次のことをお勧めしません。

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

それは荒く、残忍で、電源コードを抜くのとほぼ同等と考えることができます ...

正しい方法はあるshutdown -h nowsudo、必要なときに前に。
たぶん私は合法的な方法を言う必要があります。以下を参照してくださいtl; dr。


いくつかの言葉、別名、物語、第1章
最初は初期であり、それは最後まで続きます。

Linux全体は、init [ 1 ] [ 2 ]愛情のこもったケアに依存しています。それにも関わらず、ある程度の恩恵がないわけではありませんが、優れた主ルートユーザーがこの愛を裏切り、議論の余地のない()順序で突然開始することができました。エチケットの本は、カウント、公爵、マーキスのユーザーが前に呼び出すように規定しています)。 kill-9
sudo

その後、一部のウィザードはinitを保護するために魅力を作りました(の本からman 2 init

プロセスID 1であるinitプロセスに送信できるシグナルは、initがシグナルハンドラーを明示的にインストールしたシグナルのみです。これは、システムが誤って停止しないようにするために行われます。

(我々のスパイが報告[ U1 ] initは1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17のCHLD 32を処理すること)
したがって、良好な主のルートユーザーが ニュースを知ると、コマンドを変更kill -ABRT 1またはkill -SEGV 1通常生成することカーネルパニックとコアダンプ。

ので、それは動作しますinitが実行する最初のプロセスであり、PID番号1をとる [ 図2b ]

これは安全ではなく、賢明ではなく、悪い前兆と呪いの先駆けだと感じますが、実質的に手を入れてプラグを抜くことができない場合は...

呪い:ログに書き込むことはなく、すべてのプロセスを強制終了して終了を待つことはなく、iノードを適切に更新することもHDDに書き込むことも、ファイルシステムをアンマウントすることもありません。グラフィカルウィンドウやシェルの履歴、想像を超えた他の多くのオプションを保存することを気にしないでください。電源コード、またはラップトップの場合はバッテリーを抜くのとほぼ同じです。


正しい方法は
「非ノビス、ドミネ、非ノビス、sed nomini tuo da gloriam。」、テンプル騎士団のモットーです。 合法的な(正しい)方法が使用することである[ 3 ]
shutdown

sudo shutdown -h now

シャットダウンは、システムを安全な方法で停止するよう手配します。ログインしているすべてのユーザーには、システムがダウンしていることが通知されます...

しかし、-h now彼らはそうするのに十分な時間がないでしょう...


いくつかの言葉、別名、物語、第2
章昔々、Unixの人々の上空からいくつかの論理ステップが感じられました:

システムプロセスが強制終了され、ファイルシステムがアンマウントされると、システムは自動的に停止/電源オフまたは再起動します。これは、haltまたはrebootコマンドを使用して行われます。このコマンドは、変更をディスクに同期してから、実際の停止/電源オフまたは再起動を実行します。[ 4 ]

確かに、最近は、私たちは3モイラの存在に任意のより信用していない[ 5 ]Linuxの世界rebootpoweroff及びhalt[ 6 ]現代科学ls -l $(which poweroff halt reboot)とのいずれかをman reboot、この暗黒時代に新たな光を拡散し、私たちを明らかにするすべてのオプションを解析する真のコマンドが1つだけ存在するため、コマンド名と矛盾するアクションを最終的に自由に求めることができます。(halt -pまたはreboot -pfor poweroffshutdown -rfor reboot...)

今そのすべてすべてについて明確かつ快適であるように見えた、噂が請求[ 7 ]という地下systemdにツールセット [ 8 ]回転全体気付か残し行ったoverworldを後方互換性シムの軍隊のおかげで、リブート、電源オフ、停止[ 6 ]、さらにはtelinit [ 9 ]およびシャットダウン[ 3 ]がすべて新しいキングsystemctl [ 10 ]に既にバインドされていることにまったく気付きませんでした。JdeBP The Bard [ 9 ]の元の声から話全体を聞いてください。私にはもう息がありません。

あなたがUbuntuカルトの信奉者であるならば、あなたはまだこれらの主張[ 11 ]のすべてにしばらく気づいているかもしれません。


真ん中の地球halt -finittelinitsystemctl
速く正確なものよりますが、同様に賢明な解決策を検索します。

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になっているかどうかは、すべての正しいshudown手順を呼び出さずにコンピューターを停止できるはずです(より高速です)。

  1. halt -fオプションを指定する-f(必要なことに注意-fして、上記のコマンドでシャットダウン手順を避けるために)、sudo poweroff -fまたは多分にsudo reboot -f -h。実際、シャットダウンの呼び出しを回避するman rebootオプション-fを指定する必要性について(および同等のものから)読むことができます。

    --forceで呼び出されたとき、またはランレベル0または6で呼び出されたとき、このツールはreboot(2)システムコール自体を呼び出し(REBOOTCOMMAND引数を渡して)、システム直接再起動します

    それ以外の場合、これは REBOOTCOMMAND引数を渡さずに、適切な引数でshutdown(8)ツール呼び出すだけです。

    -f、--force
    shutdown(8)を呼び出さず、代わりにnameから期待される実際のアクションを実行します

  2. さらに、telinit [ 2b ]を使用できます(またはinit直接)

    sudo telinit 0    # or 6
    

    initにランレベルを変更するように指示します...しかし、もしそうなら、なぜそれを直接殺さないのですか?

  3. systemdでは、unwise doubleオプションを使用できます --force --force

    systemctl --force --force poweroff  
    

    systemctlマニュアルからの読み取り[ 10 ]

    -f、-force
    enableとともに使用すると、既存の競合するシンボリックリンクを上書きします。
    使用する場合haltpoweroffrebootまたはkexecを、すべてのユニットをシャットダウンせずに選択された動作を実行します。ただし、すべてのプロセスは強制的に強制終了され、すべてのファイルシステムは読み取り専用でマウント解除または再マウントされます。したがって、これは抜本的ですが、即時の再起動を要求する比較的安全なオプションです。これらの操作に--forceを2回指定すると、プロセスを終了したりファイルシステムをアンマウントしたりすることなく、すぐに実行されます。警告:これらの操作のいずれかで--forceを2回指定すると、データが失われる可能性があります。

Ps> JdeBP The Bard [ 7 ]のテールからバリアントについてのインスピレーションを受けてください


9

/ proc / sysrq-triggerに「o」をrootとして書き込むことにより、ディスクを同期せずにすぐにマシンの電源を切ることができます。

シェルスクリプトとしては次のようになります

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

/ proc / sysrq-triggerに対する権限がある場合、sysctlを使用して有効にする必要はありません。このオプションは、キーボードによるトリガーにのみ影響します。

後で読みたいファイルシステムがあるマシンでこれを行うことはお勧めしません。

Google Compute Engineでこれを使用して、10分前にテンプレートインスタンスを虐殺し、クラスタージョブの費用対効果を最大化します。


5
これがこの質問に対する最良の答えです。OPは明らかに、電源を切った場合と同様の方法でシステムをシャットダウンしたいと述べています。彼らは、損傷や「適切に行う」ことを気にしません。なぜ誰もそれを理解できないのか分かりません。
ペトル

1
bo再起動する代わりに(質問が更新されてから関連)。
カミルマシオロウスキ

7

Magic SysRqキーの組み合わせを使用する必要がありますREISUB

私の後に繰り返します:「象を育てるのはとてもつまらない...


2
いいえ。REISUBは再起動します。REISUOはシャットダウンします。あるいは単にO.
ブノワ



2

電源キーを約4秒間押し続けると、非常に高速です。


1
そうすると、電源スイッチの切り替えが実際に速くなります;)
Gnoupi

これは、OSが電源管理を行うことを想定した他のシャットダウン方法と同じです。
harrymc

1
実際に数秒待つことができず、電源を落とす場合は、ext3 / ext4のようなジャーナリングファイルシステムを使用して、未書き込みの書き込みによって多くのデータが失われないようにします。
CarlF

シャットダウンを実行するための非プログラム/非ソフトウェアの方法を探していない場合は、@ Gnoupiの提案がはるかに高速です。;)
ウスマン

2

特定のLinuxディストリビューションでは、シャットダウンにオプション-nが用意されています。(man shutdownを参照)。ただし、特定のディストリビューション(sysvinitの代わりにupstartを使用するubuntuなど)は彼のフラグをサポートしていません。このフラグは(マンページからわかるように)リスクがないわけではありません。私はこれを何年も使用していますが(私のラップトップでは、すべてのデーモンが適切に終了することを気にしません、すべてを殺してディスクキャッシュをフラッシュするだけです)(通常のシャットダウンよりも速く、プルするよりも安全ですプラグ(および友人))。これで問題が解決するかどうかを確認できます。


2

この小さなスクリプトを使用して、システムをオフにしました。実際、これは「プロトタイピング」マシンでのいたずらにこれを使用しています。「おいおい、すごい.shが何をするのか見てみましょう!」

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

(このスクリプトは、前に説明したAlt+ SysRq+ u/ s/ oを押すのと同じです。)もちろん、システムの異常終了(mysqlテーブルなどがクラッシュする可能性があります)を引き起こさないため、ダミーマシンでのみ使用します。注:同期には時間がかかる場合があります。システムに多くの空きメモリ(キャッシュ用)があり、多数のファイルをペンドライブにコピーすると、同期に時間がかかることがわかりましたが、いたずらでもお勧めします。

編集:sync「s」を書き込む代わりに使用することをお勧めします。「s」をsysrq-trigger書き込んでもスクリプトの実行はブロックされないため、ディスクへのキャッシュの書き込みを要求した後、マシンはすぐにシャットダウンします。syncコマンドとsyncは対照的に、書き込みプロセスが完了すると戻ります。そのため、キャッシュのフラッシュが完了するまで、スクリプトの実行はブロックされます。


1
'u'の前に 's'がありませんか?また、ループとして:SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done
Que Quotion
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.