У меня есть портативная версия приложения. Я запустил, например, 5 его экземпляров, и все они имеют одно и то же имя процесса, но разные pids. Я хочу найти способ, например, убить один конкретный процесс, потому что использование taskkill с именем этого процесса убило бы все из них. Я хочу убить только конкретную, предоставив pid этого процесса.
Теперь вопрос: как я могу найти pid процесса, чтобы я мог использовать этот номер, чтобы легко убить это конкретное приложение?
Например, я хочу убить третьего (я имею в виду, используя время).
Может ли pid дать мне информацию о том, когда был запущен процесс? Если нет Каковы другие обходные пути?
5 ответов
Несколько экземпляров имеют разные идентификаторы PID, как вы указали, так зачем вам их менять? Просто используйте TaskKill для уничтожения на основе определенных PID вместо имени процесса. Из TaskKill /?
:
/PID processid Specifies the PID of the process to be terminated.
Use TaskList to get the PID.
Редактировать: вот пакетный файл, который определяет PID экземпляра программы, который он запустил, и, таким образом, может быть естественным образом расширен для уничтожения этого экземпляра с помощью TaskKill, если это необходимо:
@echo off
cls
set pidlstold=
set pidlstnew=
setlocal enabledelayedexpansion
for /f "tokens=2" %%a in ('tasklist /nh /fi "imagename eq mspaint*"') do set pidlstold=%%a.!pidlstold!
if "!pidlstold!"=="No." (
echo No running instance of Paint found. Launching Paint...
start /min mspaint
echo.
for /f "tokens=2" %%a in ('tasklist /nh /fi "imagename eq mspaint*"') do set pidlstold=%%a
echo PID of just launched Paint instance is "!pidlstold!".
) else (
echo One or more running instances of Paint found. Launching Paint again...
start /min mspaint
echo.
for /f "tokens=2" %%a in ('tasklist /nh /fi "imagename eq mspaint*"') do set pidlstnew=%%a.!pidlstnew!
set pidlstnew=!pidlstnew:%pidlstold%=!
set pidlstnew=!pidlstnew:~0,-1!
echo PID of just launched Paint instance is "!pidlstnew!".
)
Вы можете сделать это с PowerShell. Например, здесь перечислены все процессы с именем "chrome" на моей машине и указаны их время запуска, отсортированные по времени запуска.
PS C:\Users\Zach> Get-Process chrome | Select-Object name,id,starttime
Name Id StartTime
---- -- ---------
chrome 1752 4/16/2015 5:53:05 PM
chrome 5404 4/16/2015 5:53:05 PM
chrome 3980 4/16/2015 5:53:05 PM
chrome 4784 4/16/2015 5:53:05 PM
chrome 4336 4/16/2015 5:53:05 PM
chrome 4492 4/16/2015 5:53:05 PM
chrome 8812 4/16/2015 5:58:19 PM
chrome 9908 4/16/2015 5:58:19 PM
chrome 3608 4/16/2015 5:58:19 PM
chrome 9980 4/16/2015 5:58:19 PM
chrome 8536 4/16/2015 5:58:19 PM
chrome 9664 4/16/2015 5:58:19 PM
chrome 1700 4/16/2015 6:02:26 PM
chrome 9712 4/16/2015 7:50:31 PM
chrome 5920 4/16/2015 7:50:31 PM
chrome 4572 4/16/2015 7:50:31 PM
chrome 2400 4/17/2015 6:19:58 AM
chrome 11780 4/21/2015 7:17:22 PM
chrome 11340 4/21/2015 8:19:17 PM
chrome 7828 4/21/2015 8:19:19 PM
chrome 9448 4/21/2015 8:32:05 PM
chrome 3400 4/22/2015 7:48:21 PM
chrome 8860 4/22/2015 7:53:28 PM
chrome 10364 4/24/2015 1:04:54 AM
chrome 4596 4/24/2015 9:52:24 AM
chrome 13392 4/24/2015 10:39:31 AM
chrome 14596 4/24/2015 10:44:28 AM
chrome 3252 4/24/2015 10:49:28 AM
chrome 16100 4/24/2015 11:31:08 AM
chrome 13840 4/24/2015 3:14:34 PM
chrome 4472 4/24/2015 6:31:11 PM
chrome 13652 4/24/2015 6:31:31 PM
chrome 12008 4/25/2015 12:51:15 AM
chrome 16016 4/25/2015 12:51:17 AM
chrome 9852 4/25/2015 1:49:19 PM
chrome 14548 4/25/2015 2:10:19 PM
chrome 16364 4/25/2015 9:18:12 PM
chrome 13860 4/26/2015 12:21:57 AM
chrome 13004 4/26/2015 10:07:53 AM
chrome 1364 4/26/2015 10:13:30 AM
chrome 12464 4/26/2015 10:13:38 AM
chrome 15144 4/26/2015 10:13:52 AM
chrome 1040 4/26/2015 10:28:49 AM
chrome 15800 4/26/2015 10:38:00 AM
chrome 12984 4/26/2015 2:51:06 PM
chrome 12972 4/26/2015 7:18:05 PM
chrome 11816 4/26/2015 7:24:32 PM
chrome 15044 4/27/2015 6:54:53 PM
chrome 11916 4/27/2015 8:00:45 PM
chrome 16216 4/28/2015 12:45:07 AM
chrome 11404 4/28/2015 8:09:43 PM
chrome 15680 4/28/2015 8:57:05 PM
chrome 6864 4/28/2015 9:12:56 PM
chrome 16172 4/28/2015 11:34:43 PM
chrome 10432 4/28/2015 11:56:50 PM
chrome 14856 4/29/2015 12:43:49 AM
chrome 17372 4/29/2015 12:45:57 AM
Используя это, вы можете найти pid того, кого хотите убить. Например:
PS C:\Users\Zach> Stop-Process 3980
чтобы остановить 3-й в списке.
Если вы хотите быстро найти PID программы, используя только встроенные инструменты, вы можете сделать все это с помощью диспетчера задач Windows.
- На вкладке Приложения найдите имя приложения. Если вы не уверены, какой из них правильный, щелкните правой кнопкой мыши и выберите « Вывести на передний план». Если правильный выходит вперед, то у вас есть правильный вход.
- Щелкните правой кнопкой мыши имя приложения и выберите « Перейти к процессу».
- При желании, если вы хотите, чтобы PID отображался, перейдите в View -> Columns и убедитесь, что выбран PID (Process Identifier).
- Щелкните правой кнопкой мыши по выделенному процессу и выберите « Завершить процесс».
В Windows (я предполагаю, что из "taskkill" вы говорите о Windows), идентификатор процесса выбирается операционной системой. Это не то, что вы можете "установить".
Это тоже не предсказуемо.
Извини за это.
PID процесса - это уникальный идентификатор. 2 или более экземпляров не могут иметь один и тот же PID, а PID управляется изнутри операционной системой Kernell, его нельзя изменить вообще.
Насколько я понимаю этот вопрос, вы упомянули taskkill
я предполагаю, что это относится к команде Windows taskkill
.
Если вам нужно уничтожить процессы по имени изображения, используйте аргумент командной строки /f /im
:
Например:
taskkill /f /im notepad.exe
Это убьет все экземпляры notepad.exe
если вам нужен PID-фильтр для прерывания процесса через интервал, используйте /f /fi
taskkill /f /fi "PID gt 1000"
Это убивает все процессы с PID выше 1000
если вам нужно убить весь процесс от конкретного пользователя
taskkill /f /fi "USERNAME eq Batman"
Это убивает все процессы пользователя Batman
если вам нужно убить весь процесс от определенного пользователя на удаленной машине с включенной службой RPC
taskkill /s GothamServer /f /fi "USERNAME eq Batman"
Это убивает все процессы пользователя Batman на удаленной машине GothamServer
Для получения дополнительной информации о фильтрах, проверьте taskkill /?