私のコードでコンパイルされた実行可能ファイルがあります。 Raspberry Pi Zero udev
Wにシリアルデバイスを接続するときにこの実行可能ファイルを実行しようとしています。ただし、何らかの理由で実行可能ファイルは実行されません。見てみると、top
プロセスの痕跡はありません。
これは私のudevルールファイルです/etc/udev/rules.d/10-serial-usb.rules
。
ACTION=="add", SUBSYSTEM=="usb", KERNEL=="1-1.3", ATTR{idProduct}=="7523", ATTR{idVendor}=="1a86", RUN="/bin/bash /home/blackbox/blackbox-cpp/run.sh"
Bashスクリプトは次のとおりです/home/blackbox/blackbox-cpp/run.sh
。
#!/bin/bash
/home/blackbox/blackbox-cpp/bin/blackbox &
Bashスクリプトは間違いなく実行中です。これは、スクリプトmkdir
などのコマンドを使用してtouch
実際に実行されており、すべてが正しく機能しているかどうかをテストしたためです。それでは、なぜ私の実行可能ファイルが違うのですか?
動作しないということは、実行ファイルがtop
。
答え1
だから私の質問に答えると、私の設定ファイルの読み込み中にエラーが発生したことがわかりました。 JSONファイルを使用して構成セットを読み込んでいますが、ルートディレクトリudev
でプロジェクトを実行しているため、ファイルが見つかりません。
したがって、この問題を解決するには、構成ファイルのパスに変更ディレクトリを挿入するbashスクリプトを変更する必要がありました。
#!/bin/bash
cd /home/guy/blackbox-cpp/
bin/blackbox
エラーを見つけてくれた@terdonに感謝します。
答え2
top
親CPUユーザーを表示します(デフォルト)。このリストは、実行中のすべてのプロセスのリストではありません。アプリケーションはCPUをほとんど使用しないため、最上位にない可能性があります。
プロセスが実行されていないことを確認するには、次のようにします。
ps -ef | grep blackbox
スクリプトを次のように変更することもできます。
#!/bin/bash
echo $$ > /tmp/blackbox.sh.pid
/home/blackbox/blackbox-cpp/bin/blackbox
ここで、pstree -an xxxxx
xxxxx は PID ファイルの PID です。
答え3
バラよりman 7 udev
:
デーモンやその他の長期実行プロセスは開始できません。切り離されたかどうかにかかわらず、分岐されたプロセスはイベント処理が完了した後に無条件に終了します。
udevルールでバックグラウンドプロセスを実行するには、systemdサービスを作成しますsystemctl start <your_service>
。