*** ВНИМАНИЕ: Блог переехал на другой адрес - demin.ws ***

воскресенье, 17 мая 2009 г.

Список процессов в Windows

Писал я как-то один QA тест, и нужно мне было понять — выполнятся ли сейчас определенный процесс или нет, и если да, то с какой командной строкой. Естественно, нужно и для UNIX и для Windows.

В UNIX в порядке вещей просто вызвать команду ps через popen() и распарсить текстовый вывод. Переносимо и надежно, так как для всех UNIXов ps всегда существует, и на этот факт можно положиться.

Для Windows же все оказалось чуть сложнее. Известная утилита pslist не является стандартной, и полагаться на нее опасно. Возиться с Windows API тоже не хотелось.

Я нашел вот такой способ. Через _popen() (аналог UNIXового popen()) можно вызвать вот такую команду:
WMIC PROCESS get Caption,Commandline,Processid
Получаем название процесса, командную строку и идентификатор процесса.

Конечно, не так задорно, как через ps, но зато стандартно.

17 комментариев:

  1. Для тестов такой вариант подойдет, _popen() в Windows только в консоли пашет.

    ОтветитьУдалить
  2. Ну тогда остается настоящий дзен - кондово через файл, благо у wmic есть ключик /OUTPUT:.

    ОтветитьУдалить
  3. Что такое WMIC?

    C:\>WMIC
    "WMIC" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.

    ОтветитьУдалить
  4. А какой у вас Windows? Я проверял на XP.

    ОтветитьУдалить
  5. WMI is preinstalled in Windows 2000 and newer OSs (including Windows Me). It is available as a download for Windows 95 and Windows 98.(c)

    Для 98 придется юзать winapi

    ОтветитьУдалить
  6. NSL: "...они снова откопали стюардессу". Как хорошо, что мы уже не поддерживаем даже NT4, не то, что уж 98-е. Ура! ;-)

    ОтветитьУдалить
  7. Не всем так везет с оборудованием. =)

    ОтветитьУдалить
  8. Может в home edition этой команды нет. Там вообще много чего нет.

    ОтветитьУдалить
  9. bialix: Вы видимо либо не от администратора запускаете, либо у Вас Служба WMI выключена (Инструментарий управления Windows).
    Win32 API - CreateToolhelp32Snapshot, в MSDN все подробно описано.
    "Ну тогда остается настоящий дзен - кондово через файл, благо у wmic есть ключик /OUTPUT:."
    Зачем, тесты же вроде как console application идут?

    ОтветитьУдалить
  10. >Что такое WMIC?
    WMI console

    >Что такое WMI?
    Windows Management Instrumentation
    (Инструментарий управления Windows)

    win 98 - too old, obsolete

    ОтветитьУдалить
  11. davaeron: Да, для этого конкретного случая все пучком.

    ОтветитьУдалить
  12. Ну, для других случаев API есть, а "кондово через файл" это, ммм, кривость я бы сказал.

    ОтветитьУдалить
  13. А командную строку процесса можно через tasklist получить?

    ОтветитьУдалить
  14. "А командную строку процесса можно через tasklist получить?"
    AFAIK - нет

    ОтветитьУдалить
  15. Прошу прощения, проглядел, что нужно еще командную строку процесса получать. Нет, с помощью tasklist'a ее не получить.

    ОтветитьУдалить