^C SIGINTはLinux adbシェルでは機能しません。

^C SIGINTはLinux adbシェルでは機能しません。

私は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 &

おすすめ記事