在linux中,您可以使用命令 & 在后台运行命令,在shell脱机后也会继续运行。我想知道是否有类似于Windows的东西......
答案 0 :(得分:36)
我相信你要找的命令是start /b *command*
对于unix,nohup
代表'没有挂断',这与后台作业(*command* &
略有不同。我相信上面的命令应该类似于windows的后台作业
答案 1 :(得分:11)
我假设您要做的是运行没有接口的命令(可能是自动的?)。在Windows上有许多选项供您查找:
最佳:将您的程序编写为Windows服务。这些将在没有人登录服务器时启动。它们允许您选择用户帐户(可能与您自己的帐户不同),如果失败则会重新启动。它们始终运行,因此您可以在特定时间或在其中定期自动执行任务。有关如何编写Windows服务的更多信息,您可以在线阅读教程,例如(http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx)。
更好:启动命令并隐藏窗口。假设该命令是DOS命令,您可以使用VB或C#脚本。有关详细信息,请参阅here。一个例子是:
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("C:\yourbatch.bat"), 0, True
您仍然需要手动启动命令或编写任务以启动命令。这是该战略中最大的下降之一。
希望有所帮助!
答案 2 :(得分:3)
您还应该查看Windows中的at
命令。它将在后台的某个时间启动一个程序,在这种情况下工作。
另一种选择是使用nssm
服务管理器软件。这将包装您作为Windows服务运行的任何命令。
更新:
nssm
并不是很好。你应该看看WinSW项目。 https://github.com/kohsuke/winsw
答案 3 :(得分:1)
如果您花 5 分钟下载 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
答案 4 :(得分:0)
使用带有start
标志的/b
命令来运行命令/应用程序,而无需打开新窗口。例如,这在后台运行dotnet run
:
start /b dotnet run
您也可以将参数传递给命令/应用程序。例如,我正在启动该C#项目的3个实例,其参数值为x
,y
和z
:
CTRL + BREAK
以我的经验,这会停止您在该cmd
实例中启动的所有后台命令/程序。
除非应用程序启用CTRL + C处理,否则将忽略CTRL + C处理。使用CTRL + BREAK中断应用程序。