Войти

Показать полную графическую версию : [решено] Получить текущий PID консоли


Bruce Wayne
26-02-2013, 00:27
Доброе время суток!

Извиняюсь, если эта тема уже была поднята, но я не нашёл таковой: подскажите, пожалуйста, как можно получить текущий PID данного Bat-файла, если его окно скрыто? Если окно есть, то всё легко и просто... Вроде, можно через WMIC как-то... Заранее спасибо!

Iska
26-02-2013, 01:53
Bruce Wayne, PID пакетного файла получить невозможно, ибо, хоть его расширение числится среди исполняемых, ему нужен хост-испонитель, каковым является командный процессор cmd.exe. Вот его PID получить можно.

Простой (отнюдь не гарантированный, и вовсе не изолированный) способ состоит в том, чтобы дать заголовку окна консоли случайное имя, затем выделить процесс, имеющий окно с таким заголовком. Полагаю, речь:
Если окно есть, то всё легко и просто... »
именно про него?

Тогда попробуйте воспользоваться, например, WSH: WSH: как из скрипта определить его идентификатор процесса (PID) (http://forum.script-coding.com/viewtopic.php?id=2454).

Bruce Wayne
26-02-2013, 13:09
Iska, спасибо большое!) Да, я написал бред, чтобы показать полную суть вопроса :D

Bruce Wayne
14-04-2013, 13:52
Получилось реализовать вот таким методом (работает даже при скрытом окне):

@echo off
for /f "tokens=2 delims==" %%a in (
'"WMIC PROCESS Where (Name="cmd.exe" AND CommandLine LIKE "%%%RANDOM%%RANDOM%%%") Get ParentProcessId /Value"'
) do set PID=%%a
echo %PID%
pause

Может, пригодится кому :)

Foreigner
14-04-2013, 14:35
Bruce Wayne,

Не работает. Выдает PID консоли.

screenshot (http://i.imgur.com/466igJ3.png)

sov44
14-04-2013, 15:14
Foreigner, на xp pro x86 работает

Iska
14-04-2013, 20:58
Foreigner, а что должно быть? Пакетный файл, запущенный из командного процессора, не порождает нового процесса cmd.exe.

Foreigner
14-04-2013, 22:09
а что должно быть? »
Я так понял, что:
получить текущий PID данного Bat-файла »

Iska
15-04-2013, 00:27
Ну, сам пакетный файл не может иметь PID: он хоть и числится в исполняемых, но — обычный текст. Потому корректно вопрос будет звучать так: «получить PID командного процессора, исполняющего данный пакетный файл».




© OSzone.net 2001-2012