web-dev-qa-db-ja.com

rc.localから開始された連続プロセスを強制終了する方法は?

私はRaspbian(Debianベース)OSでRaspberryPiに取り組んでいます。テストのために、このようなコマンドを/etc/rc.localに追加しました。

python /home/pi/test.py

このスクリプトを開始しても問題なく動作します。しかし、問題は、スクリプトに次のような無限ループがあることを忘れたことです。

while True:
    print 'Hello"
    time.sleep(5)

このループはシステムの起動をブロックするため、スクリプトを編集するためにシステムに入ることができません。 Ctrl + Cはそれを殺すために機能しません。では、rc.localから開始された連続プロセスを強制終了する方法はどうでしょうか。

3
Skyler

コンソールからインタラクティブにプロセスを強制終了することはできませんが、起動中にプロセスが実行されないようにする方法は複数あります。

a)シングルユーザーモードで起動する

ブートパーティション(FAT)のcmdline.txtの行にスペースで区切ってsを追加します。起動後、/etc/rc.localの名前を変更するか、実行不可にする(chmod a-x /etc/rc.local)か、編集することができます。

b)initの代わりにシェルで起動する

init=/bin/shの行にスペースで区切ってcmdline.txtを追加します。これにより、ブートスクリプトの開始がバイパスされます。次に、上記と同じ/etc/rc.localに対する対策を講じることができます。

c)Linuxパーティションを別のシステムにマウントする

SDカードを別のシステムに配置し、そこに/etc/rc.localを使用してパーティションをマウントします。次に、上記と同じ/etc/rc.localに対する対策を講じることができます。

4
pabouk

再起動後に無限に再生される同じ種類のアプリケーションがあります。変更がある場合は、それを別のシステムにマウントして変更を加え、ボードに戻します。そのための最も簡単な方法です。

0
NitinG