Skip to main content

How to Kill a Slow Process using DOS Batch File Script with TaskKill and TaskList



If you are still trapped in the era of batch files and command lines in Windows environment, here is something you can add to your DOS cheat codes.  Lucky for us here, we are still using DOS batch file to implement installation of some updates to our system. Here is a simple batch file script that is designed for slow systems that requires a significant amount of time to kill a particular process. The requirement is simple,  do not start any copying or moving of files until  the process ( i.e. MyProcess.exe) is totally killed by DOS. The simplest solution would be to use TASKKILL to kill the process, wait for a few seconds  then start copying/ moving of files there after. Unfortunately, while we were testing this simple step on a slow machine, DOS would take an awful lot of minutes to kill the process in question. Thus, when our delay is reached, we would encounter error on copying/moving files that is currently used by the unkilled process causing a failure on the installation. So instead of increasing our delay to God-Knows-How-Much , we went for another approach. That is to continuously try to kill the process ( after a certain  delay ) until it is actually out of the task list. This would mean  a:) continuously monitoring the task list to see if the process is still alive b:) create a loop that will do the monitoring of the task list, try to kill the process, delay for some time and repeat again. 

Here is a simple script that my friend came out to solve the issue. She used TASKKILL to kill the process, TASKLIST to list the currently running process, a temporary file to dump the task list result, PING command to add delay and some FOR and IF statements. This worked on XP machines and also tested on Win2003 machines.


:Loop
    TASKKILL /F /T /IM MyProcess.exe
    echo delaying for 35sec...
    ping 1.1.1.1 -n 1 -w 35000
    TASKLIST /FI "IMAGENAME eq MyProcess.exe" /NH > tmp.txt
      FOR /F %%A IN (tmp.txt) DO (
      IF /I "%%~A"=="MyProcess.exe" (
          GOTO Loop
         )
      )
    del /F /Q tmp.txt

REM Continue the installation process here, after MyProcess.exe has been killed.

Comments

Instead of 'ping 1.1.1.1 -n 1 -w 35000' one could use the timeout utility (e.g. timeout /T 35).

The creation of temp file is not really needed. If Command extensions are enabled (SETLOCAL ENABLEEXTENSIONS) FOR can execute a utility and then parse its output
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

See "FOR /?" for more details...

Popular posts from this blog

renaming default namespaces for VSTO projects in VS2008

So here is the scenario , you are starting a VSTO project and decided that your default namespace is ExcelAddInTesterApp . You created the project and started coding the project. After several days , your boss called and said "hey marvin , make use of this namespace OurCompany.ExcelAddInTesterApp , we have to add our company name to it got it?" . You get back to your machine thinking its just a simple property just like any project you've been working on. So you right clicked the VSTO project and hit properties . Boom! What the F@#$? The default namespace textbox is disabled!!!!



I've been through this and I googled for ways to do it and ended up with a blog from a Microsoft MVP telling me it can't be done because it is disabled. Then I thought of Refactoring, the beauty and grandeur of the renaming process. I selected the namespace and hit the refactor menu hoping that this would solve the problem . Unfortunately , it did not rather it displayed the message box …

this year

.. i will learn new things, perhaps play a new instrument or go back to school.
.. i will find beauty on the open source community.
.. i will read more books and listen to more music.
.. i will pen more poems and possibly write more songs.
.. i will go for new distances and discover new terrains.
.. i will continue to pile running miles to stay fit and healthy.
.. i will strive to be free and make myself available to unknown future.
.. i will go out of my shell more often and be socially more open.

.. i will continue to grow and go with the changes of time.
.. i will be more patient and hopeful to things that may not even be possible.
.. i will be a better son, brother and more importantly a better father.
.. i will be closer with the great beyond.

.. i will continue to repair , refactor and upgrade myself to become a better version of me.

Farewell NU107.5

As I write this blog,  millions of Filipino rock fanatics may have already known what happens after 12:00 midnight tonight. The only surviving station that caters to the rock genre will, sadly, be closing down and permanently signing off tonight. The news came to late to enjoy every second of what is left.  The sad news came to me the last week of October.  Being a follower of the station, I never believed it at first. But online resources would say the station really is nearing its demise.  With several minutes to go, it will be dead air.