組み込みLinuxデバイス用のシェルスクリプトを作成するとき、私たちの大学はreboot
/reboot -f
コマンドの後に無限ループを追加して、再起動中にスクリプトの後半が実行されないようにする傾向があります。しかし、これがreboot -f
実際にブロックコマンドであるかどうか疑問に思います。
私はそれを試してみreboot; touch test
ましtest
た。したがって、一般はreboot
非ブロックでなければなりません。ただし、reboot -f ; touch test
コマンドを実行しても生成されませんtest
。一部では、touch
touch`が実行される前にシェルがシャットダウンされた可能性があると主張する可能性があるため、これは十分な証拠ではありません。
実際にはreboot
sysvinit実行可能ファイルへのシンボリックリンクですhalt
。
誰でも増やしたり説明したりできますか?ありがとうございます。
答え1
オペレーティングシステムによって、reboot
これは大きく異なる場合があります。私にとっては、reboot
systemctlへのシンボリックリンクでした。
ls -la /sbin/reboot
lrwxrwxrwx 1 root root 14 maj 3 13:30 /sbin/reboot -> /bin/systemctl
systemctl reboot
この場合、whichと同じですsystemctl start reboot.target --job-mode=replace-irreversibly --no-block
(systemctlのマニュアルページを参照)。
-force
この場合、再起動プロセスの速度のみが向上し、ファイルに触れる前にシェルが終了する可能性があります。
これを避けたい場合は、次のようにしてみてくださいsystemctl start reboot.target --job-mode=replace-irreversibly
。しかし、再起動ブロックがこのように実装できるかどうかはわかりません。
ただし、システム化されていない環境ではreboot
状況が異なる場合があります。
私の考えでは、無限ループはここで最もクリーンなソリューションではなく、exit
再起動後に実行できます。