В UNIX в порядке вещей просто вызвать команду
ps
через popen()
и распарсить текстовый вывод. Переносимо и надежно, так как для всех UNIXов ps
всегда существует, и на этот факт можно положиться.Для Windows же все оказалось чуть сложнее. Известная утилита
pslist
не является стандартной, и полагаться на нее опасно. Возиться с Windows API тоже не хотелось.Я нашел вот такой способ. Через
_popen()
(аналог UNIXового popen()
) можно вызвать вот такую команду:WMIC PROCESS get Caption,Commandline,Processid
Получаем название процесса, командную строку и идентификатор процесса.Конечно, не так задорно, как через
ps
, но зато стандартно.
Для тестов такой вариант подойдет, _popen() в Windows только в консоли пашет.
ОтветитьУдалитьНу тогда остается настоящий дзен - кондово через файл, благо у wmic есть ключик /OUTPUT:.
ОтветитьУдалитьЧто такое WMIC?
ОтветитьУдалитьC:\>WMIC
"WMIC" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
А какой у вас Windows? Я проверял на XP.
ОтветитьУдалить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
NSL: "...они снова откопали стюардессу". Как хорошо, что мы уже не поддерживаем даже NT4, не то, что уж 98-е. Ура! ;-)
ОтветитьУдалитьНе всем так везет с оборудованием. =)
ОтветитьУдалитья пробую на Windows XP Home.
ОтветитьУдалитьМожет в home edition этой команды нет. Там вообще много чего нет.
ОтветитьУдалитьbialix: Вы видимо либо не от администратора запускаете, либо у Вас Служба WMI выключена (Инструментарий управления Windows).
ОтветитьУдалитьWin32 API - CreateToolhelp32Snapshot, в MSDN все подробно описано.
"Ну тогда остается настоящий дзен - кондово через файл, благо у wmic есть ключик /OUTPUT:."
Зачем, тесты же вроде как console application идут?
>Что такое WMIC?
ОтветитьУдалитьWMI console
>Что такое WMI?
Windows Management Instrumentation
(Инструментарий управления Windows)
win 98 - too old, obsolete
davaeron: Да, для этого конкретного случая все пучком.
ОтветитьУдалитьНу, для других случаев API есть, а "кондово через файл" это, ммм, кривость я бы сказал.
ОтветитьУдалитьtasklist не пробовали?
ОтветитьУдалитьА командную строку процесса можно через tasklist получить?
ОтветитьУдалить"А командную строку процесса можно через tasklist получить?"
ОтветитьУдалитьAFAIK - нет
Прошу прощения, проглядел, что нужно еще командную строку процесса получать. Нет, с помощью tasklist'a ее не получить.
ОтветитьУдалить