Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 终止时关闭批处理文件打开的文件_Batch File - Fatal编程技术网

Batch file 终止时关闭批处理文件打开的文件

Batch file 终止时关闭批处理文件打开的文件,batch-file,Batch File,使用任务计划程序时,如果运行批处理程序,则在结束脚本时,它只关闭批处理文件,而不关闭批处理文件生成的程序 当批处理会话收到终止命令时,是否有方法关闭该会话打开的所有程序 e、 g 当taskkill命令试图强制关闭时,是否有一种批量运行taskkill命令的方法(或关闭所有派生进程的另一种方法) 在python中,这将通过try/finally完成,如下所示: 试试看:。。。最后:killtask('win32calc') 无论发生什么情况,最终始终运行 或者打开“calc.exe”:#运行一些

使用任务计划程序时,如果运行批处理程序,则在结束脚本时,它只关闭批处理文件,而不关闭批处理文件生成的程序

当批处理会话收到终止命令时,是否有方法关闭该会话打开的所有程序

e、 g

当taskkill命令试图强制关闭时,是否有一种批量运行taskkill命令的方法(或关闭所有派生进程的另一种方法)

在python中,这将通过
try/finally
完成,如下所示:
试试看:。。。最后:killtask('win32calc')
无论发生什么情况,
最终
始终运行


或者
打开“calc.exe”:#运行一些代码

我认为您想要的行为可以通过修改来实现,即:

rem Start the process that will kill the calc.exe program after 5 seconds
start "WaitingToKill" cmd /C timeout /t 5 ^& taskkill /im calc.exe /f

rem Run the calc.exe program and wait for it to terminate
calc.exe

rem If calc.exe ends before 5 seconds, kill the killer process and terminate
taskkill /fi "WINDOWTITLE eq WaitingToKill" /f

我认为您想要的行为可以通过修改来实现,即:

rem Start the process that will kill the calc.exe program after 5 seconds
start "WaitingToKill" cmd /C timeout /t 5 ^& taskkill /im calc.exe /f

rem Run the calc.exe program and wait for it to terminate
calc.exe

rem If calc.exe ends before 5 seconds, kill the killer process and terminate
taskkill /fi "WINDOWTITLE eq WaitingToKill" /f

试试看:
taskkill/im calc.exe
我刚刚测试了它,它工作正常,
taskkill
命令工作正常。我想要一种在有人关闭批处理文件时运行它的方法(即按下x按钮或结束任务)。e、 例如,如果
超时时间达到3秒,并且我们关闭批处理文件,则calc.exe将保持打开状态。由于批处理文件已关闭,我如何关闭calc文件。您是说,每当您关闭任何运行的python脚本的主机时,该python脚本以及其中任何命令打开/生成的所有内容也将关闭?您所说的“强制关闭”
是什么意思?流程关闭的方式多种多样。如果您的意思是通过
TerminateProcess
函数关闭,这显然是
TASKKILL
通过
/f
开关所做的,那么任何进程,无论是python还是其他什么,都无法控制它并提前知道它正在被终止,从而能够处理这种情况;如果您的意思是通过单击主机进程控制台窗口上的
X
按钮来关闭,那么您需要处理
CTRL+CLOSE
信号,这在批处理脚本中是不可能的。可以使用
WMIC
以一些肮脏的方式完成,主要思想是使用看门狗进程(类似于Aacini在回答中所示),必须提前知道主进程的PID,以定期检查其是否已终止,然后尝试终止生成的子进程。主进程需要获得自己的PID(请参阅)并将它告诉watchdog以及它生成的每个进程的PID,并将它们记录在文件中,以供watchdog稍后用于终止它们。尝试:
taskkill/im calc.exe
我刚刚测试了它,它工作正常。
taskkill
命令工作正常。我想要一种在有人关闭批处理文件时运行它的方法(即按下x按钮或结束任务)例如,如果
超时时间达到3秒,我们关闭批处理文件,calc.exe将保持打开状态。我如何关闭calc文件,因为批处理文件已关闭。您是说,每当您关闭任何运行python脚本的主机时,该python脚本以及其中任何命令打开/生成的所有内容都将关闭太好了?你说的
强制关闭
是什么意思?一个进程关闭的方式有很多种。如果你说的是通过
终止进程
函数关闭,这显然是
TASKKILL
通过
/f
开关所做的,那么任何进程,不管是python还是其他什么,都不能控制它,并且事先知道它是getting终止以能够处理这种情况;如果您的意思是通过单击主机进程控制台窗口上的
X
按钮来关闭,那么您需要处理
CTRL+CLOSE
信号,这在批处理脚本中是不可能的。可以使用
WMIC
以一些肮脏的方式完成,主要思想是使用watchdog进程(类似于Aacini在回答中所示),它必须事先知道主进程的PID,以定期检查它是否已终止,然后尝试终止派生的子进程。主进程需要获得自己的PID(请参阅)并将它告诉watchdog以及它生成的每个进程的PID,并将它们记录在文件中,以供watchdog稍后用于终止它们。这是一个很好的答案,但是我们的脚本/程序可能需要10分钟或10小时才能运行。当批处理文件终止,并且我想重新运行该进程时,它可能会挂起,因为该进程仍在运行打开(然后我必须记住终止流程。当团队中的其他人都不知道结束批处理任务不会结束它产生的流程时,此操作不起作用:p)。这是一个很好的答案,但是我们的脚本/程序可能需要10分钟或10小时才能运行。当批处理文件终止,并且我想重新运行该进程时,它可能会挂起,因为该进程仍处于打开状态(然后我必须记住终止该流程。当团队中的其他人都不知道结束批处理任务不会结束它产生的流程时,该流程不起作用:p)。