2

非常に奇妙なもの: フレームバッファーで実行される Qt 4 組み込みアプリがあります。通常、ボックスの唯一の UI として inittab から実行されます。マシンをスリープ状態にするオプションがあります。通常の方法で /sys/power/state を開き、"mem" を書き込んで閉じます (QFile を使用)。非常に簡単で、起動後に初めてアプリを実行する場合を除いて、正常に動作します。スリープすると、SIGUSR2 を受信し、空白の画面で永遠にハングします。レジューム後にハングが発生。

しかし、手動で強制終了して再度実行すると、スリープは再び正常に機能します。失敗したスリープ試行を実行して強制終了する必要があることに注意してください。その後、実行するたびにすべてが桃色になり、SIGUSR2 が再び表示されることはありません。

私はすでに信号をトラップしようとしましたが、トラップしません。理由はわかりません-pthreadsがSIGUSR2を使用していることを知っていることを除いて..

困惑した。アイデア?手がかり?

[編集] 子プロセスで fork() して /sys/power/state に書き込み、終了すると問題は解決することがわかりましたが、謎は解決しません..

[編集 2] その後、マシンがシャットダウンされたときに、実際には子がまだハングしていることがわかりました (シャットダウンせずに永久にハングアップする原因となります..)。何が起こっているのか把握していませんが、スクリプト/デーモンを使用するだけで最終的に解決しました: while ループで /tmp のファイルをチェックしてアクションを確認し、後でアプリを停止または一時停止して再起動します..きれいではありませんが、機能します.

そして、SIGUSR2ハングの謎はまだ残っています..

4

0 に答える 0