进程监测

131 阅读3分钟

依据进程名监测进程

Linux/macOS 环境 (Shell脚本)

在原有的Shell脚本基础上,添加一个无限循环(使用while循环),以便持续监测进程状态:

Bash
#!/bin/bash

# 指定你要监测的进程名
PROCESS_NAME="your_process_name"

while true; do
    if ! pgrep -x "$PROCESS_NAME" > /dev/null
    then
        echo "$PROCESS_NAME is not running. Starting it now..."
        your_process_name &
    else
        echo "$PROCESS_NAME is running."
    fi
    
    # 添加适当的延时,避免过度占用系统资源
    sleep 5 # 每5秒检查一次
done

这个脚本会每5秒钟检查一次指定进程是否在运行,如果不在,则启动它。

Windows 环境 (批处理脚本)

对于Windows环境,也可以通过循环结构实现持续监测:

Batch
@echo off
setlocal

REM 指定你要监测的进程名
set "PROCESS_NAME=your_process_exe_name.exe"

:checkProcess
REM 检查进程是否在运行
tasklist /nh /fi "imagename eq %PROCESS_NAME%" | find /i "%PROCESS_NAME%" > nul
if errorlevel 1 (
    echo %PROCESS_NAME% is not running. Starting it now...
    start "" "C:\path\to\your_process_exe_name.exe"
) else (
    echo %PROCESS_NAME% is running.
)

REM 添加延时,等待一段时间后再次检查
timeout /t 5 > nul
goto :checkProcess

这个批处理脚本使用了:checkProcess标签和goto命令形成循环,每5秒检查一次进程状态,并在必要时启动进程。

请注意,在实际应用中,应适当调整检查间隔时间以避免对系统性能造成不必要的影响。

后台运行命令

Linux/macOS 环境

在Linux或macOS系统中,你可以使用nohup命令或者将脚本与&符号结合来后台运行脚本。推荐使用nohup,因为它还可以防止脚本因用户登出而终止。

使用nohup命令:

Bash
nohup ./monitor_and_start.sh > monitor.log 2>&1 &
  • nohup 表示“不挂断”,让命令在后台运行,即使用户注销也不停止。
  • > 和 2>&1 是重定向输出,将标准输出(stdout)和错误输出(stderr)都重定向到 monitor.log 文件中,这样可以查看脚本的输出信息。
  • 最后的 & 使整个命令在后台执行。

使用screentmux工具也是后台运行的好选择,尤其是当你希望以后还能重新连接到这个会话查看输出或进行控制时。

Windows 环境

在Windows环境中,可以使用start命令的特殊语法来后台运行批处理脚本,但要注意,这通常会在一个新的命令提示符窗口中运行,虽然窗口会被最小化,但不会完全隐藏。

Cmd
start /B cmd /c monitor_and_start.bat
  • /B 参数表示在后台启动新窗口,但不创建新的窗口。
  • /c 参数告诉cmd执行后续的命令并随后退出。

然而,Windows没有像Linux那样的内置机制来轻松地完全隐藏后台进程的窗口。如果你需要更高级的后台处理,可能需要考虑使用计划任务(Task Scheduler)或者第三方工具,如nssm(Non-Sucking Service Manager)将脚本作为服务安装,从而在后台静默运行。

请根据你的具体需求和环境选择合适的方法。