有没有办法获取我刚刚在后台启动的控制台程序的进程 ID?
Is there a way to get the process ID of a console program I've just started in the background?
假设我刚刚在后台启动了以下程序:
START /B CMD /C tomcat.exe
START /B CMD /C tomcat.exe
START /B CMD /C tomcat.exe
而且我想杀死第二个。因为它们具有相同的图像名称,所以我不能使用 taskkill
来使用 tomcat.exe
杀死它们,否则我会杀死比我想要的更多。
我想要的是获取每个进程启动时的进程 ID。
我的问题是:有没有办法获取我刚刚在后台启动的控制台程序的进程 ID?
你可以使用wmic
来帮你获取ProcessId:
wmic process where "Name='tomcat.exe'" get processid, commandline
您必须获取每个新 tomcat 实例的 Pid 以存储在文件中(pid1.txt、pid2.txt、...),这样您就可以杀死您想要的那个.
您还可以看看:
这是一个实用程序 batch function,它可以让您生成一个进程并将其 PID 设置为一个变量。将其复制粘贴到脚本底部,在最后的 exit /b
或 goto :EOF
之后,因此它只能由 call
执行。它看起来很复杂(说实话,它可能比当前情况需要的复杂一点),但如果您需要为未来的项目回收它,它应该处理反斜杠和引用的参数。
:spawn command args
:: sets %PID% on completion
setlocal
set "PID="
set "return="
set "args=%*"
set "args=%args:\=\%"
for /f "tokens=2 delims==;" %%I in (
'wmic process call create "%args:"=\"%" ^| find "ProcessId"'
) do set "return=%%I"
endlocal & set "PID=%return: =%"
goto :EOF
如果您 wmic process call create "ping localhost"
从控制台,您将看到它是如何工作的。与 start /b
不同,使用 wmic process call create
到 运行 一个新的异步进程将在进程启动时输出进程的 PID。
像这样调用上面的函数:
call :spawn tomcat.exe
set "instance1=%PID%"
call :spawn tomcat.exe
set "instance2=%PID%"
call :spawn tomcat.exe
set "instance3=%PID%"
:: kill the 2nd one:
taskkill /PID "%instance2%"
假设我刚刚在后台启动了以下程序:
START /B CMD /C tomcat.exe
START /B CMD /C tomcat.exe
START /B CMD /C tomcat.exe
而且我想杀死第二个。因为它们具有相同的图像名称,所以我不能使用 taskkill
来使用 tomcat.exe
杀死它们,否则我会杀死比我想要的更多。
我想要的是获取每个进程启动时的进程 ID。
我的问题是:有没有办法获取我刚刚在后台启动的控制台程序的进程 ID?
你可以使用wmic
来帮你获取ProcessId:
wmic process where "Name='tomcat.exe'" get processid, commandline
您必须获取每个新 tomcat 实例的 Pid 以存储在文件中(pid1.txt、pid2.txt、...),这样您就可以杀死您想要的那个.
您还可以看看:
这是一个实用程序 batch function,它可以让您生成一个进程并将其 PID 设置为一个变量。将其复制粘贴到脚本底部,在最后的 exit /b
或 goto :EOF
之后,因此它只能由 call
执行。它看起来很复杂(说实话,它可能比当前情况需要的复杂一点),但如果您需要为未来的项目回收它,它应该处理反斜杠和引用的参数。
:spawn command args
:: sets %PID% on completion
setlocal
set "PID="
set "return="
set "args=%*"
set "args=%args:\=\%"
for /f "tokens=2 delims==;" %%I in (
'wmic process call create "%args:"=\"%" ^| find "ProcessId"'
) do set "return=%%I"
endlocal & set "PID=%return: =%"
goto :EOF
如果您 wmic process call create "ping localhost"
从控制台,您将看到它是如何工作的。与 start /b
不同,使用 wmic process call create
到 运行 一个新的异步进程将在进程启动时输出进程的 PID。
像这样调用上面的函数:
call :spawn tomcat.exe
set "instance1=%PID%"
call :spawn tomcat.exe
set "instance2=%PID%"
call :spawn tomcat.exe
set "instance3=%PID%"
:: kill the 2nd one:
taskkill /PID "%instance2%"