0
我正在Windows中運行一個進程。該過程由批處理文件「skrmedpostctl_start.bat」啓動。我正在寫一個java項目,它使用skrmedpostctl的輸出。我的系統在Linux平臺上工作,但不在Windows上。問題是,在執行這個skrmedpostctl(Linux中的一個shell腳本,Windows中的一個批處理文件)之前,我正在檢查它是否已經運行。這是我到目前爲止有:如何檢查批處理文件是否在Windows上運行?
switch (CURRENT_OS) {
case LINUX:
String[] procCheck_SKR = new String[]{"/bin/bash", "-c", "ps -ef | grep MedPost-SKR"};
String[] procCheck_WSD = new String[]{"/bin/bash", "-c", "ps -ef | grep WSD_Server"};
try {
String procs_SKR = systemCall(procCheck_SKR);
String procs_WSD = systemCall(procCheck_WSD);
if (procs_SKR.split("\n").length < 2)
systemCall(new String[]{"/bin/bash", "-c", MM_BIN_DIR + "./skrmedpostctl start"});
if (procs_WSD.split("\n").length < 2)
systemCall(new String[]{"/bin/bash", "-c", MM_BIN_DIR + "./wsdserverctl start"});
} catch (IOException e) { e.printStackTrace(); System.exit(0); }
break;
case WINDOWS:
String[] procCheck = new String[]{"cmd.exe", "/c", System.getenv("windir") +"\\system32\\tasklist.exe"};
String pidInfo = "";
try {
Process proc = Runtime.getRuntime().exec(procCheck);
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
for (String line; (line = reader.readLine()) != null;)
pidInfo += line;
reader.close();
} catch (IOException e) { e.printStackTrace(); System.exit(0); }
if (pidInfo.contains("NAME OF MY PROCESS")) {
// do stuff
}
break;
default: throw new IllegalArgumentException("Can't run this program on " + CURRENT_OS);
}
的問題是,當我運行該批處理文件,任務管理器只顯示「Windows命令處理器」,而不是實際的名稱。所以,在linux中,我可以做一個「ps -ef | grep ...」來檢查它是否已經在運行,我似乎無法在windows中做同樣的事情。有沒有辦法做到這一點?任何幫助將不勝感激。
試過了。它沒有幫助。附加信息只是說「C:\ Windows \ System32 \ cmd.exe」。 –
@ChthonicProject,如果你包含在批處理文件中,你試圖找到'title something'命令,它是否在檢索列表中不可見? –
如果我使用命令提示符啓動批處理過程,則窗口標題顯示「命令提示符 - skrmedpostctl_start.bat」。但是,如果我只需雙擊該批處理文件或使用Runtime.getRuntime()。exec()從我的Java代碼執行,那麼它只會顯示「C:\ Windows \ System32 \ cmd.exe」。 –