PDA

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


dima05605
01-12-2012, 20:39
Доброго времени суток!

Мне нужно узнать PID дочернего процесса. Как это реализовать?

Iska
02-12-2012, 06:18
В принципе, кроме особых случаев — никак. Можно, например, поизвращаться с классом «wmic.exe» Process и его методом Create, но это не для слабонервных.

Возможны обходные пути. Приведите детальную информацию.

dima05605
02-12-2012, 13:24
Я пишу панель управления своим хостингом. Так вот там мне надо сделать так, чтобы батник запускал другие программы и останавливал их. Много программ совпадают в названии, поэтому надо как-то работать с PID'ом. То есть нужно создавать и "убивать" дочерние процессы.

dima05605
02-12-2012, 13:56
Хорошо, давайте подойдем с другой стороны. Мне надо узнать PID запущенной программы. То есть я запускаю любую программу из батника и мне надо узнать PID только что запущенной программы. Этого достаточно для моей задачи.

Iska
02-12-2012, 14:16
Запускайте не пакетным файлом. Используйте для этого WSH или PoSH.

P.S. У Вас не тот же посыл: CMD/BAT - [решено] Присвоение pid'a процессу при запуске. (http://forum.oszone.net/showthread.php?t=244087)?

dima05605
02-12-2012, 14:52
Вот нашел рабочий код. Он перезапускает программу по времени. А у меня неизвестно имя программы, известно только ее расположение.


@echo off

set PNAME=notepad.exe
set PPATH=%windir%\system32\notepad.exe

set TITLE=%RANDOM%%RANDOM%
TITLE %TITLE%
:LOOP
(Start "" "%PPATH%"
ping -w 780000 192.0.2.0 -n 1 >nul
for /f "tokens=2 delims=," %%a in ('TaskList /NH /FO CSV /FI "WINDOWTITLE eq %TITLE%"') do (
for /f "skip=1" %%b in ('WMIC PROCESS WHERE "ParentProcessId=%%~a AND Name='%%PNAME%%'" Get ProcessId^,SessionID') do (
taskkill /PID "%%b"
)))
GoTo:LOOP

dima05605
02-12-2012, 15:16
Так можете дать код, который бы показывал PID процесса при его запуске?

Iska
02-12-2012, 15:20
А у меня неизвестно имя программы, известно только ее расположение. »
Это как? Как можно запустить приложение, не указывая имя его исполняемого файла?

Так можете дать код, который бы показывал PID процесса при его запуске? »
Повторю (http://forum.oszone.net/post-2001156.html#post2001156).

dima05605
02-12-2012, 15:25
Мне WSH скрипт не нужен. Ладно, буду сам что-то решать...

Foreigner
02-12-2012, 16:44
dima05605, На примере калькулятопа

@echo off
setlocal

set "wmic=wmic process call create "calc" | findstr "ProcessId""
for /f "tokens=2 delims==;" %%i in (' "%wmic%" ') do set "pid=%%i"

echo %pid%

timeout /t 3
taskkill /pid %pid%

dima05605
04-12-2012, 18:15
@echo off setlocal set "wmic=wmic process call create "calc" | findstr "ProcessId"" for /f "tokens=2 delims==;" %%i in (' "%wmic%" ') do set "pid=%%i" echo %pid% timeout /t 3 taskkill /pid %pid% »

Все работает, спасибо. А как запустить что-то другое кроме калькулятора?

Foreigner
04-12-2012, 18:48
А как запустить что-то другое кроме калькулятора? »


... call create "C:\Some Folder\program.exe" ...

Malysh-ok
17-10-2013, 20:17
Всем доброго здравия.
А PID самой себя задача (батник) узнать может?




© OSzone.net 2001-2012