如何在Windows的后台运行命令?

oknwwptz  于 2022-11-18  发布在  Windows
关注(0)|答案(8)|浏览(314)

在linux中你可以使用 command**&**在后台运行命令,同样的在shell离线后会继续。我想知道在windows中有没有类似的东西...

lyfkaqu1

lyfkaqu11#

我认为您要查找的命令是start /b *command*
对于unix,nohup表示“no hangup”,这与后台作业(应该是*command* &)略有不同。我相信上面的命令应该与windows的后台作业类似。

vhmi4jdf

vhmi4jdf2#

我假设你想运行一个没有界面的命令(可能是自动的?)。在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

你仍然需要手动启动命令或者写一个任务来启动命令。这是这个策略最大的福尔斯之一。

  • Worst:使用启动文件夹启动命令。这在用户登录到计算机时运行

希望这对你有所帮助!

00jrzges

00jrzges3#

使用带有/b标志的start命令可以运行命令/应用程序,而无需打开新窗口。例如,以下命令在后台运行dotnet run

start /b dotnet run

您也可以向命令/应用程序传递参数。例如,我启动了这个C#项目的3个示例,参数值分别为xyz

要停止在后台运行的程序:CTRL + BREAK

根据我的经验,这会停止您在该cmd示例中启动的所有后台命令/程序。
Microsoft docs
除非应用程序启用CTRL+ C行程,否则会忽略CTRL+ C行程。请使用CTRL+BREAK中断应用程序。

thtygnil

thtygnil4#

你还应该看看Windows中的at命令。它会在后台的某个时间启动一个程序,在这种情况下是有效的。
另一个选择是使用nssm服务管理器软件。这将把你正在运行的任何命令 Package 为windows服务。
最新消息:
nssm不是很好。您应该转而查看WinSW项目。https://github.com/kohsuke/winsw

suzh9iv8

suzh9iv85#

如果您花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
0ejtzxu1

0ejtzxu16#

这是不可想象的,十年后,Windows仍然没有一个体面的方式来运行命令在后台。
start /B command是最常给出的答案,但当终端关闭时,该命令也会关闭。
现在,Windows 10有一个内置的ssh服务器(虽然你必须手动安装)。

ssh username@localhost "my_backgroud_command --params"

然后CTRL C,关闭终端,命令将继续在后台运行。
这是目前为止我找到的最体面的方式。虽然还不够体面,因为你必须先安装和配置ssh服务器。

0ve6wy6x

0ve6wy6x7#

当我需要在后台运行一个简单的命令或一组命令,然后注销时,我经常使用的一个选项是编写命令脚本(秒)(BAT、CMD、PowerShell、等....全部正常工作),然后使用Windows本机任务计划程序执行脚本。从任务计划程序执行的作业不会在您注销时消失。任务计划程序作业可以配置为以“隐藏”方式运行(即e.命令提示符窗口将不会显示。当手头的任务很简单,编写一个控制台应用程序来执行一两个简单的命令会“矫枉过正”,即比它的价值更多的工作时,这个脚本+任务调度程序是一个很好的替代方案,而不是在你喜欢的开发环境(如Visual Studio)中开发一个可执行文件(如yadda.exe)。
就我的意见。
干杯!干杯!

qmelpv7a

qmelpv7a8#

在这里的Windows服务器上,使用一个标题(在双括号中),否则它不会“释放”:
启动“”“chrome.exe --参数”&& echo truc

相关问题