【发布时间】:2013-10-07 23:15:34
【问题描述】:
我希望我能清楚地解释这一点。我想以编程方式从外部以“礼貌”的方式停止一个小程序,但仍返回状态代码 0。
更多细节:我正在开发一个测试/基准测试框架,该框架 exec()s "appletviewer embed.html" 并获取由此启动的进程的 pid。我一直在做的是等待五秒钟,然后打开 X 显示并搜索其 _NET_WM_PID 属性等于 pid 的窗口,并将 WM_DELETE_MESSAGE 发送到该窗口.但是,这只适用于 Java 1.5 及更高版本,因为 1.4 及更低版本没有设置 _NET_WM_PID 所以我找不到刚刚打开的窗口。
要明确一点:使用 signal() 不是我想要的,因为小程序的关闭应该是“正常的”,即不应该让 appletviewer 返回非零。
再次澄清:这是一个测试/基准测试框架;停止必须由框架而不是通过修改小程序来启动。我们有很多小程序要测试/运行,框架必须一个一个地运行它们,无需用户交互。
我考虑过的方法是:
列出 WM_CLASS 属性包括 sun-applet-main 的窗口,之前 在 exec() 之后,比较列表以找出哪些窗口 在 exec() 之后打开。
编写我自己的 appletviewer 并制作它 接受 SIGUSR1 并关闭小程序,例如,通过调用 destroy() 方法。
有更好的建议吗?
【问题讨论】: