私はkernel-5.10.24を使用する組み込みLinuxシステムを開発しています。
busyboxをinitとして使用し、rootfsにadbdを含む他のユーティリティがあります。 PCで実行して組み込みシステムにログインし、いくつかの操作を繰り返すシェルスクリプトを実行できます
。adb shell
^C
ところで割り込みスクリプトを入力したところ、失敗するのが見つかりました。^Z
最初に使用してからkill -9 xxx
スクリプトの実行を停止する必要があります。
プロセスはいつ停止それを渡して^Z
読んで、/proc/pid_of_script/status
次を見つけました。
SigPnd: 00000000000000000000000000000000
ShdPnd: 00000000000000000000000000020000
SigBlk: 00000000000000000000000000020000
SigIgn: 00000000000000000000000000001006
SigCgt: 00000000000000000000000000020000
SignIgnはSIGINT(2)をブロックします。その後、親プロセスと親プロセス(adbd)を確認したところ、どちらもシグナル処理でSIGINTを無視することがわかりました。
adbdは、S50usbを呼び出す/etc/init.d/rcSによって開始されます(S50usbは他のスクリプトも呼び出す)。
その後、シェルが実行された後、/ etc / inittabでS50usbを起動するように変更しました。しかし、以前と同じ結果を得ます。
スクリプトプロセスの実行中にSigIgnを調整し、SIGINTが実行を停止する方法があるかどうか疑問に思います。
答え1
LL3のコメントと回答に基づいてプログラムをデーモンとして実行することと「&」を使用してバックグラウンドに分岐することの違いは何ですか?私は解決を得た。
adbd はスクリプトによって開始され、adbd &
バックグラウンドに配置されます。
バックグラウンド・プロセスでは、adbd は SIGINT を無視するように設定されます。
解決策は、start-stop-daemon
スクリプトを使用して直接ではなくスクリプトからadbdを起動することですadbd &
。