How to run a command in the background on Windows?

131,656

Solution 1

I'm assuming what you want to do is run a command without an interface (possibly automatically?). On windows there are a number of options for what you are looking for:

  • Best: write your program as a windows service. These will start when no one logs into the server. They let you select the user account (which can be different than your own) and they will restart if they fail. These run all the time so you can automate tasks at specific times or on a regular schedule from within them. For more information on how to write a windows service you can read a tutorial online such as (http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx).

  • Better: Start the command and hide the window. Assuming the command is a DOS command you can use a VB or C# script for this. See here for more information. An example is:

    Set objShell = WScript.CreateObject("WScript.Shell")
    objShell.Run("C:\yourbatch.bat"), 0, True
    

    You are still going to have to start the command manually or write a task to start the command. This is one of the biggest down falls of this strategy.

  • Worst: Start the command using the startup folder. This runs when a user logs into the computer

Hope that helps some!

Solution 2

I believe the command you are looking for is start /b *command*

For unix, nohup represents 'no hangup', which is slightly different than a background job (which would be *command* &. I believe that the above command should be similar to a background job for windows.

Solution 3

Use the start command with the /b flag to run a command/application without opening a new window. For example, this runs dotnet run in the background:

start /b dotnet run

You can pass parameters to the command/application too. For example, I'm starting 3 instances of this C# project, with parameter values of x, y, and z:

enter image description here

To stop the program(s) running in the background: CTRL + BREAK

In my experience, this stops all of the background commands/programs you have started in that cmd instance.

According to the Microsoft docs:

CTRL+C handling is ignored unless the application enables CTRL+C processing. Use CTRL+BREAK to interrupt the application.

Solution 4

You should also take a look at the at command in Windows. It will launch a program at a certain time in the background which works in this case.

Another option is to use the nssm service manager software. This will wrap whatever command you are running as a windows service.

UPDATE:

nssm isn't very good. You should instead look at WinSW project. https://github.com/kohsuke/winsw

Solution 5

If you take 5 minutes to download visual studio and make a Console Application for this, your problem is solved.

using System;
using System.Linq;
using System.Diagnostics;
using System.IO;
namespace BgRunner
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Starting: " + String.Join(" ", args));
            String arguments = String.Join(" ", args.Skip(1).ToArray());
            String command = args[0];
            Process p = new Process();
            p.StartInfo = new ProcessStartInfo(command);
            p.StartInfo.Arguments = arguments;
            p.StartInfo.WorkingDirectory = Path.GetDirectoryName(command);
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.UseShellExecute = false;
            p.Start();
        }
    }
}

Examples of usage:

BgRunner.exe php/php-cgi -b 9999
BgRunner.exe redis/redis-server --port 3000
BgRunner.exe nginx/nginx
Share:
131,656
Louis
Author by

Louis

Updated on July 23, 2022

Comments

  • Louis
    Louis 5 months

    In linux you can use command & to run command on the background, the same will continue after the shell is offline. I was wondering is there something like that for windows…

  • Louis
    Louis almost 9 years
    question: start /b command will stop running as soon i logoff from the server right? and yes, sorry I is command & not nohup
  • Oeste
    Oeste almost 9 years
    See this answer: stackoverflow.com/a/3382087/1751190 I believe so, but I'm not positive. I would test it myself, but I'm not near a windows computer right now.
  • Graham
    Graham over 8 years
    if you only have VS express then this is a way to create a windows service: codeproject.com/Articles/106742/…
  • msb
    msb about 8 years
    Just as a confirmation: yes, the command WILL DIE if you log off (if you connected on the windows machine from a telnet to run the command).
  • D.Kastier
    D.Kastier almost 5 years
    Save the VB Script with the extension ".vbs"
  • Binarus
    Binarus about 1 year
    Probably not the sort answer the OP was hoping for, but publishing the source code deserves an upvote, so +1.
  • barlop
    barlop 6 months
    well, this doesn't work for calc.exe i.stack.imgur.com/b5Aqh.png
  • barlop
    barlop 6 months
    also definitely flashes up a cmd prompt for a moment if i do (tested from win7), "start".."run".. c:\users\user\abc\a.exe c:\users\user\abc\bb.bat