この質問はいくつかの嘘に基づいています。

この質問はいくつかの嘘に基づいています。

重要: これにより、以前の動作を再び停止できます。

apt install sysvinit-core  

追加する:古い赤い帽子ベースバージョンは停止して電源を切ることもできます。

私はなぜDebian 9でコンピュータをシャットダウンするためにもはや停止を使用してはいけないのかを理解しようとしています。この動作はsystemdから削除されました。少し怖かったのですが、妥当な論理的な理由があると思いました。

他のUnixまたはUnixファミリーシステムは同じように動作しますか、それともLinuxは異なりますか?

これで、シャットダウン後にシャットダウンするには、停止の代わりにpoweroffを使用する必要があります。

このコマンドが他のUnix系システムでどのように解釈されるかを知っている人はいますか?

たとえば、Debian 7 は一時停止して電源を切ることができるため、これは重複しません。

答え1

ダーバン

Debian(esque) システムで SysVinit を使用する場合は、/etc/defaults/haltランレベル 0 への移行が完了したらシステムを一時停止するのか、電源を切るべきかを定義する変数が含まれています。デフォルト設定はですHALT=poweroff

haltSysVinit 2.74より前は直接実行しないでください。そのバージョン以降、SysVinitコマンドは現在の実行レベルが0または6以外でhalt呼び出されます。これはマニュアルページに文書化されています。ランレベル0への移行が完了すると、デフォルトでランレベルスクリプトが実行されます。shutdown -hhalt(8)$HALTpoweroff

RHEL/セントOS

RHEL/CentOS 5 は SysVinit を使用する最後のバージョンです。バージョン6ではこれを使用しupstart、バージョン7ではこれを使用しますsystemd。 RHEL 5.11 から実行レベル 0 に切り替えたときに実行する最後のスクリプトは、最後の数行/etc/init.d/haltは次のとおりです。

[ "$INIT_HALT" != "HALT" ] && HALTARGS="$HALTARGS -p"

exec $command $HALTARGS

ランレベル6への切り替え(再起動)が終わっても同じスクリプトが実行されるため、実際のコマンドの実行は変数によって定義され、これまたはに$commandなります。変数の値によって、スクリプトはオプションを追加するかどうかを決定します。この変数はで設定されます。 RHEL 5.11 のマニュアルページには次のように記載されています。/sbin/halt/sbin/reboot$INIT_HALT-p/sbin/shutdownshutdown(8)

停止または停電

-Hオプションは単に初期化環境変数INIT_HALTをHALTに設定し、-Pオプションは単に変数をPOWEROFFに設定します。 quit(8) を終了シーケンスの最後の操作として呼び出す終了スクリプトは、これらの環境変数を確認し、そのオプションが実際に効果を示すように正しいオプションを指定して quit(8) を呼び出す必要があります。 Debian 3.1(sarge) はこれをサポートします。

(はい、RHEL 5.11のマニュアルページにはDebian 3.1が記載されています!

/etc/init.d/haltRedHatは、電源オフ(/sbin/halt -pシステムのシャットダウン時に使用される)がデフォルトの停止動作であるスクリプトで上記のテストをコーディングすることを決定したようです。電源を切らずに停止を達成する唯一の方法は、-H大文字のオプションを使用して明示shutdown的に要求することです。コマンド、例えばshutdown -hH now

haltただし、デフォルトの電源オフはLinuxディストリビューションでカスタマイズされた実行レベルスクリプトによってトリガされるため、SysVinitコマンドの実際の機能ではありません。

歴史記録

SysVinitを使用する以前のシステム(Linuxおよび非Linux)には直接使用されず、単に適切なシャットダウン/再起動スクリプトの一部として使用されるいくつかのコマンドがありました。 SysVinit 2.74以前は、/sbin/haltオプションのないコマンドはhalt -f現代のSysVinitと同じことをしました。つまり、サービスを停止したりファイルシステムをマウント解除したりせずにカーネルを残酷にしてすぐにシャットダウンします。

同じ理由でLinuxkillallコマンドに慣れるのは、他のUnixでも危険です。マニュアルページには、次のような不吉な警告もあります。

Linux 以外のシステムで killall 名を入力すると、特に特権を持つユーザーが実行している場合、期待した効果がない可能性があります。

これは、Classic SystemVがkillall終了スクリプトの一部としてのみ使用されるように設計されたコマンドの1つであるためです。 SysVinit を含む Linux ディストリビューションでは、このコマンドのクラシックバージョンがkillall5kill になることがあります。みんなカーネルスレッド以外のプロセスとセルフセッションのプロセス:すべてのサービスをシャットダウンした後にローカルファイルシステムをアンマウントする前に、シャットダウンスクリプトでアンマウントを遅延または防止できる他のプロセスをシャットダウンするために使用されます。

killall <something>(これをどのように知ることができますか?まあ、私はかつてSolaris 2.6システムでrootとして実行する間違いを犯しました。これは非常に効果的な学習経験でした。)

答え2

この質問はいくつかの嘘に基づいています。

halt人々はコンピュータをシャットダウンするためにそれを使用せず、これはsystemdでも変更されませんでした。

halt別名終了haltsysして停止します。 poweroffシャットダウンおよび電源オフに使用される最新のコマンドです。 (https://unix.stackexchange.com/a/196471/5132微妙な部分が説明されていますが、質問はLinuxオペレーティングシステムにのみ関連しているので、ここでは簡単に説明します。この回答は、AT&T System 5 UNIXの側面にのみ焦点を当てています。 )

私が説明したようにhttps://superuser.com/a/900205/38062、コンピュータが必ずしも必要ではありません。有能なソフトウェア制御で電源を切ります。haltsysそして、命令された動作はhalt通常、機械をシャットダウンして停止することです。次の動作は、オペレータが物理リセットボタンまたは電源スイッチを使用することです。

halt-p/オプションは--poweroff同じにするために追加されましたが、poweroffこれはこれらのコマンドに対して一般的に重複して矛盾するオプションが増加したことを示しています。証人haltDebian 7 の Upstart コマンドのマニュアルページ。まさにhalt --poweroffそこ。 haltDebian 7 の van Smoorenburg コマンドのマニュアルページ同じものhalt -p

しかし、これはいいえsystemdはいくつか変更しました。 systemdは同じ機能を提供します。これシステムhaltコマンド 返品持っています--poweroff。また--reboot、(良い測定のために)--haltオプションもあります。

私も同じことをしなければなりません。noshツールセットのhalt/コマンドhaltsys、互換性のため。

あなたはできます間違っているその普通の古いhaltコンピュータがコンピュータをシャットダウンします。しかし、これはUpstartにとって明らかに間違っています。ただvan Smoorenburgツールセットに適用されます。もしエラーが発生した場合

今年最終的に修正されたバグは、van Smoorenburghaltコマンドは単にオプションの存在を無視し、-p代わりに/etc/default/halt。電源オフに設定した場合、オプションが指定されていなくてもhalt電源は常にオフになります。-p逆に、その設定を停止に設定すると、オプションが指定されていてもhalt常に停止します。-p

しかし、これは間違いですは文書化または予想される動作ではなく、Debianで使用できるすべてのコマンドの動作ではなく、一般的なコマンドの一般的な動作でもhaltありません。halt

追加読書

関連情報