Один процесс возвращает более одного PID

#batch-file

Вопрос:

Я использую этот пакетный файл для поиска имен процессов по их значениям PID:

 @ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET /a pid=4792
FOR /f "skip=3delims=" %%a IN ('tasklist') DO (
    SET "found=%%a"
    SET /a foundpid=!found:~26,8!
    IF %pid%==!foundpid! echo found %pid%=!found:~0,24%!
)
GOTO :EOF
 

В ответ я вижу этот вывод:

 root@root: C:UsersrootDesktopPIDf.bat
found 3276=svchost.exe

root@root: C:UsersrootDesktopPIDf.bat
found 4792=svchost.exe
 

Разве один процесс никогда не должен иметь более одного PID?

Я что-то здесь упускаю?

Комментарии:

1. Уникальны только PID -коды. Для данного исполняемого файла может существовать несколько процессов , таких как svchost.exe , и все эти процессы сообщают свое имя как имя базового исполняемого файла.

2. СОВЕТ: FOR /F "TOKENS=1,2 DELIMS=," %%G IN ('tasklist /NH /FO CSV') DO Это присвоит имя изображения %%G, а PID — %%H.

3. Вы даже можете продвинуть TASKLIST команду немного дальше, чтобы перечислить только PID то, что вам нужно. tasklist /NH /FO CSV /FI "PID eq 4792" .

Ответ №1:

Процесс может быть запущен несколько раз и, следовательно, появится в диспетчере задач или здесь с помощью вашего сценария с разными идентификаторами процессов.

Так что это совершенно справедливо.

На самом деле, SVCHOST.exe используется для запуска всех видов служб Windows, поскольку он действует как хост (подсказка в названии!).