我相信你要找的命令是start /b *command*
对于Unix系统,nohup
代表“不挂断”,这与后台作业略有不同(后台作业应该是*command* &
)。我认为上述命令应该类似于Windows中的后台作业。
我假设您想要做的是在没有界面的情况下运行命令(可能是自动执行的)。在Windows上有许多选项可满足您的需求:
最佳方法:将程序编写为Windows服务。这些服务会在没有用户登录到服务器时启动。它们允许您选择用户帐户(可以与您自己不同),并且如果失败,它们将重新启动。它们始终运行,因此您可以在其中特定时间或定期计划自动化任务。有关如何编写Windows服务的详细信息,请阅读在线教程,例如(http://msdn.microsoft.com/en-us/library/zt39148a (v = vs.110) .aspx)。
更好的方法:启动命令并隐藏窗口。假设命令是DOS命令,则可以使用VB或C#脚本来实现。有关更多信息,请参见此处。以下是一个示例:
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("C:\yourbatch.bat"), 0, True
你仍然需要手动启动命令或编写一个任务来启动命令。这是这种策略最大的缺陷之一。
希望这可以帮到你!
使用 /b
标志和 start
命令来运行一个命令/应用程序,而不需要打开新窗口。例如,这将在后台运行 dotnet run
命令:
start /b dotnet run
你也可以向命令/应用程序传递参数。例如,我正在启动此C#项目的3个实例,其参数值为x
、y
和z
:
CTRL + BREAK
根据我的经验,这将停止在该cmd
实例中启动的所有后台命令/程序。
根据 Microsoft 文档:
除非应用程序启用了 CTRL+C 处理,否则将忽略 CTRL+C 处理。使用 CTRL+BREAK 中断应用程序。
如果您花五分钟下载Visual Studio并创建一个控制台应用程序,您的问题就解决了。
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();
}
}
}
使用示例:
BgRunner.exe php/php-cgi -b 9999
BgRunner.exe redis/redis-server --port 3000
BgRunner.exe nginx/nginx
c:\users\user\abc\a.exe c:\users\user\abc\bb.bat
,也肯定会短暂地弹出一个cmd提示符。 - barlopat
命令。它将在后台的特定时间启动程序,适用于此情况。nssm
服务管理软件。这将把您运行的任何命令包装成Windows服务。nssm
并不是很好。您应该查看WinSW项目。 https://github.com/kohsuke/winsw
难以想象,Windows 十年之后仍然没有一个像样的方法在后台运行命令。
start /B command
是最常见的答案,但是当终端关闭时,命令也会被关闭。
现在,Windows 10 内置了一个(需要手动安装)ssh 服务器,您可以运行以下命令:
ssh username@localhost "my_backgroud_command --params"
然后按 CTRL C,关闭终端,命令将在后台继续运行。
这是我目前找到的最好的方法。 虽然还不够好,因为您必须先安装和配置ssh服务器。
start
命令,它启动一个新的shell。 - paddystart
,一旦我离线了它就会停止运行,对吗? - Louisstart /b
与*nix中的&是相同的。 - Terrible Tadpole