回答
我認爲你不能做簡單的命令行實用程序,如IE實際派生子流程,每個選項卡,也就是說,如果IE瀏覽器尚未運行,你會得到一個父IE進程和子進程的選項卡,如果IE已經運行,你只需要一個子進程。
當你編寫自己的工具來殺死IE,因爲當你殺死一個孩子(TAB)工藝這將是甚至相當棘手,IE會自動恢復該選項卡。
又見此相關的問題:How to obtain process of newly created IE8 window?(雖然沒有很好的答案有)。
我們仍然堅持使用IE6!所以他們都在單獨的進程 - 但我認爲後來的選項卡版本仍然使用幕後流程。 – Nick 2009-11-27 11:18:17
您可以使用VBScript,這裏是一個例子創建記事本,然後利用它的PID
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
errReturn = objProcess.Create("notepad.exe", null, objConfig, PID)
If errReturn = 0 Then
WScript.Echo "Process ID is: " & PID
End If
WScript.Echo "Ready to kill process: " & PID & "? [Y|y]"
Do While Not WScript.StdIn.AtEndOfLine
strInput = strInput & WScript.StdIn.Read(1)
Loop
If LCase(strInput) = "y" Then
WScript.Echo "Select * from Win32_Process Where ProcessId = '" & PID & "'"
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessId = '" & PID & "'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
End If
另存爲myscript.vbs和命令行
c:\test> cscript /nologo myscript.vbs
這裏終止這是我用什麼:
@echo off
rem there is a tab in the file at the end of the line below
set tab=
set cmd=javaw -jar lib\MyProg.jar
set dir=%~dp0
echo Starting MyProg
set pid=notfound
for /F "usebackq tokens=1,2 delims=;=%tab% " %%i in (
`wmic process call create "%cmd%"^, "%dir%"`
) do (
if /I %%i EQU ProcessId (
set pid=%%j
)
)
echo %pid% > MyProg.pid
該目錄設置爲該cmd文件所在的目錄。更改dir
改變這一點。修改cmd
以更改運行哪個命令。
如果你想殺死它stop.cmd,它看起來像這樣
@echo off
for /F %%i in (%~dsp0MyProg.pid) do taskkill /F /PID %%i
del %~dsp0MyProg.pid
不能在win7上工作 – JavaDev1987 2015-06-24 17:25:59
我剛剛在Windows 7上試過了wmic調用,它工作正常。某種程度上解析結果可能會出錯,我會稍後再檢查。 – kybernetikos 2015-06-25 22:24:39
@kybernetikos謝謝!開箱即用。這節省了我很多努力! – 2016-05-11 07:28:19
出於某種原因,你得到的進程ID的做法並沒有爲我工作,但因爲我在批專家,我編寫我自己的方法,在這裏安裝:
@echo off
call:AsyncCmd
rem call:AsyncCmd "echo hello world"
rem call:AsyncCmd "call build.bat"
exit /b
rem ------------------------------------------------------------------------------------------
rem Starts asynchronous command execution
rem %1 is command, if empty - only aborts existing build.
rem ------------------------------------------------------------------------------------------
:AsyncCmd
if exist %~dp0SetupBuild_Completed.txt (
del /f %~dp0SetupBuild_Pid.txt >nul 2>&1
del /f %~dp0SetupBuild_Completed.txt >nul 2>&1
)
if not exist %~dp0SetupBuild_Pid.txt goto lStartProc
rem --------------------------------------------------
rem Abort build process
rem --------------------------------------------------
set /p pid=<%~dp0SetupBuild_Pid.txt
echo Cancelling setup build process, process id %pid%
pskill -t %pid%
del /f %~dp0SetupBuild_Pid.txt >nul 2>&1
:lStartProc
if "%~1" == "" exit /b 0
rem --------------------------------------------------
rem Starts asyncronous build process
rem --------------------------------------------------
set dir=%~dp0
set dir=%dir:~0,-1%
for /f "tokens=2 delims==; " %%a in ('wmic process call create "cmd /c mincon.exe && %~1 && echo 1>%~dp0SetupBuild_Completed.txt"^, "%dir%" ^| findstr /r "ProcessId"') do set pid=%%a
echo Setup build started, process id: %pid%
echo %pid%>%~dp0SetupBuild_Pid.txt
exit /b 0
由@kybernetikos提供的答案有輕微的變化,因爲它有一個解析問題。注意行if %%j gr 0 (
@echo off
rem there is a tab in the file at the end of the line below
set tab=
set cmd=javaw -jar lib\MyProg.jar
set dir=%~dp0
echo Starting MyProg
set pid=notfound
for /F "usebackq tokens=1,2 delims=;=%tab% " %%i in (
`wmic process call create "%cmd%"^, "%dir%"`
) do (
if %%j gtr 0 (
set pid=%%j
)
)
echo %pid% > MyProg.pid
大多數情況下你知道你要啓動的任務 - 在這種情況下,IEXPLORER應顯示的頁面。
因此,如何
taskkill /FI "Windowtitle eq *yourpagetitle*"
它會殺死的顯示網頁標題的東西所有情況下,具有特定標題經常有應該只有一個。
Tom
- 1. 從macOS上的open命令啓動的應用程序進程獲取pid
- 2. 如何捕獲從init.d運行的Linux守護進程的pid
- 3. 獲取啓動進程的PID C++
- 4. 如何獲取啓動進程的命令行
- 5. 捕獲由Makefile啓動的後臺進程的PID
- 6. 如何用命令行參數啓動遠程進程?
- 7. 如何通過命令行提取進程的PID
- 8. 從子進程獲取PID
- 9. 如何獲取進程啓動時傳遞的命令行參數的索引?
- 10. 魚殼如何獲得在後臺啓動的進程的PID
- 11. 從調用進程獲取命令行
- 12. 獲取管道啓動時出現的進程的PID
- 13. 管道輸入到unix進程從命令行知道PID
- 14. 命令行進程
- 15. 從不是子進程的命令行在Windows中啓動EXE
- 16. 如何獲得與系統運行進程的PID()在C++中命令
- 17. 如何在進程啓動後執行docker命令
- 18. 如何用命令行參數在perl中啓動進程?
- 19. 如何使用Platform LSF blaunch命令同時啓動進程?
- 20. 如何找到在java中啓動的進程的進程ID(pid)?
- 21. 如果進程沒有運行,啓動Windows命令行
- 22. 如何獲取子進程的PID?
- 23. 如何獲得一個進程的PID?
- 24. 如何獲得gjs中的進程pid?
- 25. 如何獲得PyWin32進程的PID
- 26. linux - 獲取進程的pid
- 27. 獲得子進程的PID
- 28. 如何獲得在c程序中使用system()啓動的進程的PID
- 29. Win32進程如何獲取父進程的PID?
- 30. 如何使用子進程check_output獲取子進程的PID
只是爲了記錄:DOS沒有PID。如果你指的是Windows命令行環境,然後這麼說,但作爲DOS它進來16色固定寬度的字體,請不要標記一切...... – Joey 2009-11-27 18:31:43