2014-02-19 2 views
0

Я запускаю процесс в 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 ...», чтобы проверить, запущен ли он, я не могу сделать то же самое в окнах. Есть ли способ сделать это? Любая помощь будет оценена.

ответ

1
tasklist /v 

В расширенном режиме (/v), Tasklist возвращает заголовок окна. Вы можете проверить его на имя командного файла или специальный набор заголовков из командного файла.

+0

Пробовал это уже. Это не помогает. Дополнительная информация просто говорит «C: \ Windows \ System32 \ cmd.exe». –

+0

@ChthonicProject, если вы включили в командный файл, который вы пытаетесь найти команду 'title something', не видна ли она в извлеченном списке? –

+0

В заголовке окна отображается «Командная строка - skrmedpostctl_start.bat», если я запускаю пакетный процесс с помощью командной строки. Но если я просто дважды щелкаю командный файл или выполняю его из кода Java, используя 'Runtime.getRuntime(). Exec()', то он показывает только «C: \ Windows \ System32 \ cmd.exe». –