私のプロセスは終了しましたが、カーネル通知を理解できませんでした。

私のプロセスは終了しましたが、カーネル通知を理解できませんでした。

組み込みx86設定で実行されるカスタムアプリケーション(buildrootとuClibcを使用して構築)があります。アプリケーションは正常に実行されていましたが、今朝仕事に戻ったときにプロセスが終了し、端末に次の出力が表示されることがわかりました。

SAK: killed process 1008 (CX_SC3): fd#4 opened to the tty
SAK: killed process 1009 (CX_SC3): fd#4 opened to the tty
SAK: killed process 1011 (CX_SC3): fd#4 opened to the tty
SAK: killed process 1012 (CX_SC3): fd#4 opened to the tty

CX_SC3私のプロセスには複数のスレッドがあり、そのうちの1つは/dev/ttyS0ワイヤレスモデムを介してメッセージを送信するために開きます。シリアルポートのfd番号は4です。私が理解していないことは

  1. SAKの意味
  2. 私のアプリケーションのインスタンスは一度に1つだけ実行されるため、上記のPIDは私のアプリケーションによって終了されたプロセスを参照する必要があります。このPIDは実際に私のスレッドIDである可能性があります(私のアプリケーションは常に4つのスレッドを実行するため)。
  3. アプリが別のプロセスを終了する場合、アプリも終了するのはなぜですか?
  4. この部分はどういうopened to the tty意味ですか?いくつかの研究によると、これはプログラムの開始に使用されるttyに割り込み文字が送信されることに関連していることを示しています。

どのイベントが次の出力を引き起こす可能性がありますか?私の組み込み設定は非常に小さく、私のカスタムアプリケーション以外はほとんど使用されbusybox実行されません。vsftpd私のアプリケーションの堅牢性は非常に重要です。

編集する:以下のコメントに応じて、これがSAK検出によるものであれば、誤ってこの問題を引き起こす可能性がありますか?シリアルポートから読み取った内容はそれをトリガできますか?また、私のシステムに合ったSAKの組み合わせをどのように見つけますか?ルートファイルシステムにファイルがありませんrc.sysinitrc.local

修正する:私はこのイベントが自分のホストが終了した時点を正確に指摘することができました。内蔵ターゲットにシリアルデータを送信するために、ホストとターゲットデバイスの間にシリアルケーブルがあります。ターゲットを実行中のままにしてホストをシャットダウンすると、上記のようにアプリケーションがシャットダウンされます。ホストをシャットダウンする前にシリアルケーブルを外すと、アプリケーションはシャットダウンせずに正常に動作します。この動作は実行後も発生します。

echo 0 > /proc/sys/kernel/sysrq

アドバイスに従ってください。

ベストアンサー1

この文脈では、SAKが実際に意味するものは次のとおりです。安全注意ボタン。表示されるメッセージは、次に定義されるカーネルメッセージです。ドライバ/tty/tty_io.c。 SAK は、コンソールでセキュアなユーザーログインを保証するキーの組み合わせです。 Linuxでは、SAKはSAKを呼び出す端末に接続されているすべてのプロセスを終了してこれを保証します。initその後、信頼できるログインプロセスが再開されると予想されます。getty次に、loginまたはXサーバーそしてディスプレイマネージャ

CX_SC3リストされているPIDは、実際にSAKによって終了されたアプリケーションスレッドのPIDです。

fd#n opened to the tty終了するプロセス/スレッドにファイル記述子があることを意味します。nSAKという端末を開きます。

Linuxには2つの方法があります。SAKに電話する:

  1. 渡す魔法システムリクエストキー - 通常は++ Alt(仮想端末)または(シリアルコンソール)です。あなたの場合はそうではありません。すでに魔法を無効にしてみて、誤ってシーケンスを送信する可能性はほとんどありません。SysRqKBreakKSysRqecho 0 > /proc/sys/kernel/sysrqBreakK

  2. 定義されたキーシーケンス(仮想端末)または割り込み信号(シリアルコンソール)を介して。シリアルコンソールのSAKの可用性が制御されますsetserial

割り込み信号間隔値は、文字転送時間(開始ビット、ストップビット、およびパリティビットを含む)より長い期間、シリアルラインを介して連続的に送信されます。あなたの場合、ホストのシャットダウン中に割り込み信号が発生した可能性があります。次の手順でターゲットデバイスのシリアルポートからSAKをオフにします。setserial:

setserial /dev/ttyS0 ^sak

シリアルポートからSAK機能の状態を確認できますsetserial -g /dev/ttyS0。オンSAKの後に表示されますFlags:。起動後にこのオプションを自動的に設定するには、BusyBoxシステムの起動スクリプトを参照してください。通常、/etc/init.d/rcSおよび/etc/rc.d/S*/またはチェックマークがあります。/etc/inittab他の可能性のために。

おすすめ記事