Писал я как-то один QA тест, и нужно мне было понять — выполнятся ли сейчас определенный процесс или нет, и если да, то с какой командной строкой. Естественно, нужно и для UNIX и для Windows.
В UNIX в порядке вещей просто вызвать команду ps через popen() и распарсить текстовый вывод. Переносимо и надежно, так как для всех UNIXов ps всегда существует, и на этот факт можно положиться.
Для Windows же все оказалось чуть сложнее. Известная утилита pslist
не является стандартной, и полагаться на нее опасно. Возиться с Windows API тоже не хотелось.
Я нашел вот такой способ. Через _popen() (аналог UNIXового popen()
) можно вызвать вот такую команду:
WMIC PROCESS get Caption,Commandline,Processid
Получаем название процесса, командную строку и идентификатор процесса.
Конечно, не так задорно, как через ps, но зато стандартно.