2

一个非常奇怪的问题:我有一个在帧缓冲区上运行的 Qt 4 嵌入式应用程序,它通常从 inittab 作为盒子上唯一的 UI 运行。有一个让机器进入睡眠状态的选项——我做正常的事情并打开/sys/power/state,写“mem”并关闭它(使用QFile)。非常简单,除了启动后第一次运行应用程序外,它工作正常。如果它处于休眠状态,那么它会收到 SIGUSR2 并永远挂起并出现空白屏幕。挂起发生在恢复后。

但是,如果我手动杀死它并再次运行它.. sleep 再次正常工作。请注意,它必须执行失败的睡眠尝试并被杀死——毕竟每次运行时都是桃色的,SIGUSR2 再也不会出现。

我已经尝试过捕获信号 - 不捕获。不知道为什么 - 除了我知道 pthreads 使用 SIGUSR2 ..

难住了。想法?线索?

[编辑] 我发现如果我 fork() 并写入子项中的 /sys/power/state 并退出它可以解决问题,但它并没有解决这个谜..

[编辑 2] 我随后发现,事实上,当机器关闭时,孩子仍然在挂起(导致它永远挂起而不会关闭..),尽管刚才提到的丑陋的黑客确实修复了挂起的挂起 - 我还没有弄清楚发生了什么,但最终通过使用脚本/守护进程解决了它:在一个while循环中,它检查/tmp中的文件以执行操作,然后暂停或暂停并重新启动应用程序..不漂亮但它有效.

SIGUSR2 挂起的谜团仍然存在..

4

0 回答 0