我有一個perl CGI調用一個java應用程序,它依次檢查一個Mysql數據庫。如果我搜索不存在的條目,java應用程序會在服務器上顯示異常處理程序消息(需要X顯示窗口)。這個例外是直截了當並且可以理解的,但是必須點擊才能關閉它,此時perl CGI可以繼續。客戶當然不能(也不應該)看到異常消息。Perl調用java - 如何防止異常顯示?
我的問題是..我怎樣才能防止異常消息顯示在服務器窗口,並防止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
謝謝。 Rocky。
=====================
謝謝。 我加入這個...
$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消息仍然彈出。 沒有睡眠線,java消息不會彈出。換句話說,看起來pid被殺死了,但是如此之快以至於結果不會被送入mytest.txt。我認爲睡眠函數會給java應用程序工作一段時間,然後kill會移除彈出消息。但是這並沒有發生。
似乎我將不得不請求對java應用程序進行更改,以便它不會在服務器的屏幕上顯示消息。
嘗試在您的perl cgi腳本中包含業務邏輯中的數據庫訪問 – 2013-04-24 14:40:10
如果您使用'Open2'使用'waitpid'來等待它完成。你不必殺死這個過程。 – TrueY 2013-04-25 07:57:05