我在一个变量中捕获PID,我稍后会将其删除
IF NOT "%SERVICE_PID%" == 0 taskkill /pid %SERVICE_PID% /t /f
虽然每次我在批处理文件中执行此操作时都会使计算机重新启动,因为它会导致某些系统进程失效
服务pid应该是从cmd
启动的用户定义服务我不明白为什么它一直让我的机器嘶哑。
当我在命令行上运行“taskkill / pid%SERVICE_PID%/ t / f”时,它运行正常! = /
帮助!
设置SERVICE_PID
FOR /F "tokens=4 delims= " %%A IN ('sc queryex myservice ^|FIND "PID"')
DO SET SERVICE_PID=%%A
答案 0 :(得分:5)
我发现使用它会获得正确的PID:
for /f "tokens=1,2,3,4 delims=/ " %%a in ('sc queryex ServiceName ^|FIND "PID"') do set PID=%%c
taskkill /pid %PID% /t /f
然后它就像一个魅力。
答案 1 :(得分:1)
尝试删除/f
选项,它强制终止进程,因此系统进程可能会在没有通知的情况下被强制终止。
我怀疑你是在试图杀死批处理脚本中的某些系统进程,因为在你的PID列表中可能还有一些系统进程ID。
由于
答案 2 :(得分:1)
确保启用延迟扩展。有关说明,请参阅帮助集。
插入此行
SETLOCAL ENABLEDELAYEDEXPANSION
作为批处理文件的第一行。
并使用!SERVICE_PID!
代替%SERVICE_PID%
来获取环境变量。
答案 3 :(得分:1)
taskkill / fi“IMAGENAME eq idsm.exe”/ fi“CPUTIME gt 00:30:00”
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
idsm.exe 4556 Console 0 38,328 K
我得到了这个结果,在同一个命令行中如何杀死这个进程,它应该自动运行,意味着如何使用这个PID进行查杀
答案 4 :(得分:1)
我发现这是最可靠的
net stop SERVICE_NAME
timeout /t 10
for /f "tokens=1,2,3,4 delims=/ " %%a in ('sc queryex SERVICE_NAME ^|FIND "PID"') do set PID=%%c
if not %PID% == 0 taskkill /pid %PID% /f
timeout /t 10
net start SERVICE_NAME
超时是任意的。 第一次超时使服务有机会在一段额外的时间内正常停止。 第二个超时允许操作系统做出反应,否则您最终可能会做出反应
服务正在启动或停止。请稍后再试。,服务不会重启。
我正在检查服务是否由停止,如果不是%PID%== 0 并在必要时强制终止它。在我的情况下, / t 标志是不必要的。