Я запускаю процесс в Windows. Процесс запускается пакетным файлом «skrmedpostctl_start.bat». Я пишу проект java, который использует вывод skrmedpostctl. У меня есть система, работающая на платформах Linux, но не в Windows. Проблема в том, что до того, как я запустил этот skrmedpostctl (сценарий оболочки в Linux, пакетный файл в 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);
}
Проблема заключается в том, что при запуске пакетного файла, диспетчер задач показывает только «Command для Windows Processor», а не реальное имя. Поэтому, хотя в Linux я могу сделать «ps -ef | grep ...», чтобы проверить, запущен ли он, я не могу сделать то же самое в окнах. Есть ли способ сделать это? Любая помощь будет оценена.
Пробовал это уже. Это не помогает. Дополнительная информация просто говорит «C: \ Windows \ System32 \ cmd.exe». –
@ChthonicProject, если вы включили в командный файл, который вы пытаетесь найти команду 'title something', не видна ли она в извлеченном списке? –
В заголовке окна отображается «Командная строка - skrmedpostctl_start.bat», если я запускаю пакетный процесс с помощью командной строки. Но если я просто дважды щелкаю командный файл или выполняю его из кода Java, используя 'Runtime.getRuntime(). Exec()', то он показывает только «C: \ Windows \ System32 \ cmd.exe». –