我有一个调用 java 应用程序的 perl CGI,该应用程序又检查 Mysql 数据库。如果我搜索不存在的条目,java 应用程序会在服务器上显示异常处理程序消息(需要 X 显示窗口)。该异常是直截了当且可以理解的,但是必须单击以将其关闭,此时 perl CGI 可以继续。客户当然不能(也不应该)看到异常消息。
我的问题是..如何防止异常消息显示在服务器窗口上并阻止 CGI 继续?有没有办法关闭来自 perl 的消息?我可以控制 perl 脚本,但不能控制我调用的 java 应用程序。
$ENV{'DISPLAY'} = 'myserver:0.0';
$testline = system("java -Dby.product=true -jar javaApp.jar $version status>mytest.txt") >> 8;
如果 $version 不存在,我会得到异常。我将结果通过管道传输到文件中,以便以后在 perl 中进行文件处理
谢谢。洛基。
======================
谢谢。我加了这个...
$ENV{'DISPLAY'} = 'server:0.0';
use IPC::Open2;
use POSIX ":sys_wait_h";
$pid = open2(\*CHLD_OUT, \*CHLD_IN, "java -Dby.product=true -jar javaApp.jar $version status>mytest.txt 2>/tmp/java_error.$$");
sleep(5);
kill('TERM', $pid);
如果我在数据库中使用一个已知值,它可以像以前一样正常工作。如果我搜索一个不存在的值,java 消息仍然会弹出。如果没有 sleep 行,则不会弹出 java 消息。换句话说,它看起来像 pid 被杀死了,但是太快了以至于结果没有被输入 mytest.txt。我认为 sleep 功能会给 java 应用程序一些时间来工作,然后 kill 会删除弹出消息。但这不会发生。
看来我可能不得不请求对 java 应用程序进行更改,以便它不会在服务器的屏幕上显示消息。