For a second time now, I’ve found myself needing to kill processes in my automated build scripts, so that was enough for me to automate it and wrap it up in a custom NAnt task.  The first time I needed it, I just embedded the C# code inside a NAnt script block, but using it as “real” NAnt task is much nicer.  And, perhaps I overlooked it, but I did not see a task in the set of NAnt or NAntContrib tasks to do this kind of simple operation and Google didn’t turn up anything either.  So I just banged it out real quick…

Here’s how it can be used:

   1: <loadtasks assembly="pathToToolsFolderjoeyDotNet.Commons.dll" />
   2: <kill processName="w3wp" />


And for those that are interested, here’s the code for the task, although it’s really quite simple: 

   1: /// <summary>
   2: /// Looks for processes with specified name and kills them
   3: /// </summary>
   4: [TaskName("kill")]
   5: public class KillTask : Task
   6: {
   7:     private string processName;
   9:     [TaskAttribute("processName", Required = true), StringValidator(AllowEmpty = false)]
  10:     public string ProcessName
  11:     {
  12:         get { return processName; }
  13:         set { processName = value; }
  14:     }
  16:     protected override void ExecuteTask()
  17:     {
  18:         Log(Level.Info, "Looking for processes named {0}...", processName);
  19:         foreach (Process process in Process.GetProcessesByName(processName))
  20:         {
  21:             Log(Level.Info, "Found process named {0}, killing...", processName);
  22:             process.Kill();
  23:         }
  24:     }
  25: }


Disclaimer:  I take no responsibility for what happens if try to pass in a process name like “System” or “winlogon” or “explorer”.   So please use wisely…  🙂

As usual, you can grab the source code yourself from the repository.

I Thought These Days Were Over…