WIndows的CMD\PowerShell命令行启动程序后台运行类似Linux系统的nohup命令

windows下没有类似nohup的命令但是可以使用其他命令进行实现此功能

一、用到的命令解释:

1、Start-Process:启动本地计算机上的一个或多个进程。

相关介绍链接:Start-Process (Microsoft.PowerShell.Management) | Microsoft Learn​​​​​

主要用到的参数

1.1、 -WindowStyle

指定用于新进程的窗口的状态。 此参数的可接受值为: **Normal**、 **Hidden**、 **最小化**和 **最大化**。 默认值为 **Normal**。

1.2、 -FilePath

指定进程中运行的程序的可选路径和文件名。 输入与计算机上的程序关联的可执行文件或文档的名称,例如 .txt.doc 文件。 此参数是必需的。

1.3、-RedirectStandardOutput

指定文件。 此 cmdlet 将进程产生的输出发送给指定的文件。 输入路径和文件名。 默认情况下,在控制台中显示该输出。

2、tasklist 

直接powershell中输入 tasklist /? 即可查看帮助

TASKLIST [/S system [/U username [/P [password]]]]
         [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]

描述:
    该工具显示在本地或远程机器上当前运行的进程列表。


参数列表:
   /S     system           指定连接到的远程系统。

   /U     [domain\]user    指定应该在哪个用户上下文执行这个命令。

   /P     [password]       为提供的用户上下文指定密码。如果省略,则
                           提示输入。

   /M     [module]         列出当前使用所给 exe/dll 名称的所有任务。
                           如果没有指定模块名称,显示所有加载的模块。

   /SVC                    显示每个进程中主持的服务。

   /APPS 显示 Microsoft Store 应用及其关联的进程。

   /V                      显示详细任务信息。

   /FI    filter           显示一系列符合筛选器
                           指定条件的任务。

   /FO    format           指定输出格式。
                           有效值: "TABLE"、"LIST"、"CSV"。

   /NH                     指定列标题不应该
                           在输出中显示。
                           只对 "TABLE" 和 "CSV" 格式有效。

   /?                      显示此帮助消息。

筛选器:
    筛选器名称     有效运算符           有效值
    -----------     ---------------           --------------------------
    STATUS          eq, ne                    RUNNING | SUSPENDED
                                              NOT RESPONDING | UNKNOWN
    IMAGENAME       eq, ne                    映像名称
    PID             eq, ne, gt, lt, ge, le    PID 值
    SESSION         eq, ne, gt, lt, ge, le    会话编号
    SESSIONNAME     eq, ne                    会话名称
    CPUTIME         eq, ne, gt, lt, ge, le    CPU 时间,格式为
                                              hh:mm:ss。
                                              hh - 小时,
                                              mm - 分钟,ss - 秒
    MEMUSAGE        eq, ne, gt, lt, ge, le    内存使用(以 KB 为单位)
    USERNAME        eq, ne                    用户名,格式为
                                              [域\]用户
    SERVICES        eq, ne                    服务名称
    WINDOWTITLE     eq, ne                    窗口标题
    模块         eq, ne                    DLL 名称

注意: 当查询远程计算机时,不支持 "WINDOWTITLE" 和 "STATUS"
      筛选器。

Examples:
    TASKLIST
    TASKLIST /M
    TASKLIST /V /FO CSV
    TASKLIST /SVC /FO LIST
    TASKLIST /APPS /FI "STATUS eq RUNNING"
    TASKLIST /M wbem*
    TASKLIST /S system /FO LIST
    TASKLIST /S system /U 域\用户名 /FO CSV /NH
    TASKLIST /S system /U username /P password /FO TABLE /NH
    TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"

3、for循环

1、读取文本内容
@echo off
for /f %%i in (test.txt)do ( 
    echo %%i
)

pause > nul

2、/f 的tokens

文件内容如下:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
@echo off

for /f "delims=: tokens=7" %%i  in (test.txt)do (
    echo %%i
)
结果如下:
/bin/bash
/sbin/nologin

 二、具体脚本

1、后台执行程序脚本bat

@echo off
powershell.exe -command "& {Start-Process -WindowStyle hidden -FilePath 'D:\develop\frp\frpc.exe' '-c D:\develop\frp\frpc.ini' -RedirectStandardOutput 'D:\develop\frp\frp_log.log'}"

powershell.exe -command "&{ tasklist /fi 'IMAGENAME eq frpc.exe' > D:\develop\frp\now_pid.pid}"

执行脚本解释

①我这用的是frpc的exe执行程序 需要传一个参数 -c 加配置文件 所以是以上的参考方式;

②我将命令返回的程序输出到中指定文件了-RedirectStandardOutput 参数指定的 具体可以看一下Start-Process命令的链接介绍;

③cmd的执行内容为:

D:\develop\frp\frpc.exe -c D:\develop\frp\frpc.ini

④将执行调起的pid输出到对应的文件里面

 输出图片

2、检查执行与否以及终止程序

@echo off
rem 开启延迟扩展
setlocal enabledelayedexpansion
rem 获取程序名为example.exe的pid
for /f "tokens=2 delims=," %%a in ('tasklist /nh /fo csv /fi "imagename eq frpc.exe"') do (
    rem 去掉双引号
    set pid=%%~a
    rem 打印pid
    echo The pid of example.exe is [ !pid! ]
)
pause
taskkill /pid !pid!

检查停止脚本解释

①rem 开启延迟扩展 setlocal enabledelayedexpansion

②delims=xxx - 指分隔符集。这个替换了空格和制表符的默认分隔符集。

tokens=x - 指每行的第几个符号被传递到每个迭代

③pause 按任意键继续会进行停止操作 也可以去掉

④taskkill命令 停止命令


TASKKILL [/S system [/U username [/P [password]]]]
         { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]

描述:
    使用该工具按照进程 ID (PID) 或映像名称终止任务。

参数列表:
    /S    system           指定要连接的远程系统。

    /U    [domain\]user    指定应该在哪个用户上下文执行这个命令。

    /P    [password]       为提供的用户上下文指定密码。如果忽略,提示
                           输入。

    /FI   filter           应用筛选器以选择一组任务。
                           允许使用 "*"。例如,映像名称 eq acme*

    /PID  processid        指定要终止的进程的 PID。
                           使用 TaskList 取得 PID。

    /IM   imagename        指定要终止的进程的映像名称。通配符 '*'可用来
                           指定所有任务或映像名称。

    /T                     终止指定的进程和由它启用的子进程。

    /F                     指定强制终止进程。

    /?                     显示帮助消息。

筛选器:
    筛选器名      有效运算符                有效值
    -----------   ---------------           -------------------------
    STATUS        eq, ne                    RUNNING |
                                            NOT RESPONDING | UNKNOWN
    IMAGENAME     eq, ne                    映像名称
    PID           eq, ne, gt, lt, ge, le    PID 值
    SESSION       eq, ne, gt, lt, ge, le    会话编号。
    CPUTIME       eq, ne, gt, lt, ge, le    CPU 时间,格式为
                                            hh:mm:ss。
                                            hh - 时,
                                            mm - 分,ss - 秒
    MEMUSAGE      eq, ne, gt, lt, ge, le    内存使用量,单位为 KB
    USERNAME      eq, ne                    用户名,格式为 [domain\]user
    MODULES       eq, ne                    DLL 名称
    SERVICES      eq, ne                    服务名称
    WINDOWTITLE   eq, ne                    窗口标题

    说明
    ----
    1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。
    2) 远程进程总是要强行 (/F) 终止。
    3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。

例如:
    TASKKILL /IM notepad.exe
    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
    TASKKILL /F /IM cmd.exe /T
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
    TASKKILL /S system /U 域\用户名 /FI "用户名 ne NT*" /IM *
    TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值