Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как узнать PID дочернего процесса? (http://forum.oszone.net/showthread.php?t=248134)

dima05605 01-12-2012 20:39 2036657

Как узнать PID дочернего процесса?
 
Доброго времени суток!

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

Iska 02-12-2012 06:18 2036883

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

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

dima05605 02-12-2012 13:24 2037011

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

dima05605 02-12-2012 13:56 2037043

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

Iska 02-12-2012 14:16 2037052

Запускайте не пакетным файлом. Используйте для этого WSH или PoSH.

P.S. У Вас не тот же посыл: CMD/BAT - [решено] Присвоение pid'a процессу при запуске.?

dima05605 02-12-2012 14:52 2037085

Вот нашел рабочий код. Он перезапускает программу по времени. А у меня неизвестно имя программы, известно только ее расположение.


@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 2037101

Так можете дать код, который бы показывал PID процесса при его запуске?

Iska 02-12-2012 15:20 2037105

Цитата:

Цитата dima05605
А у меня неизвестно имя программы, известно только ее расположение. »

Это как? Как можно запустить приложение, не указывая имя его исполняемого файла?

Цитата:

Цитата dima05605
Так можете дать код, который бы показывал PID процесса при его запуске? »

Повторю.

dima05605 02-12-2012 15:25 2037109

Мне WSH скрипт не нужен. Ладно, буду сам что-то решать...

Foreigner 02-12-2012 16:44 2037145

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 2038633

Цитата:

Цитата Foreigner
@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 2038640

Цитата:

Цитата dima05605
А как запустить что-то другое кроме калькулятора? »

Код:

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

Malysh-ok 17-10-2013 20:17 2236211

Всем доброго здравия.
А PID самой себя задача (батник) узнать может?


Время: 07:58.

Время: 07:58.
© OSzone.net 2001-