V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mathzhaoliang
V2EX  ›  问与答

怎样监测一个程序是否正在运行

  •  
  •   mathzhaoliang · 2019-03-04 09:55:16 +08:00 · 2295 次点击
    这是一个创建于 2117 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,我现在要写一个监测程序,目的是判断系统中某个特殊的程序 /进程是否正在运行。我所知道的是用 pgrep 命令查看某个程序名的所有进程名字,但是这样是否太笨了?而且无法判断哪个是主进程。请问有什么好的方法没有?

    PS: 系统可以理解为 linux。

    11 条回复    2019-03-04 14:06:12 +08:00
    ic2y
        1
    ic2y  
       2019-03-04 10:02:34 +08:00
    强制要求所有的程序内嵌 http 服务,进行 状态检测和 负载信息收集。
    mathzhaoliang
        2
    mathzhaoliang  
    OP
       2019-03-04 10:23:05 +08:00
    @ic2y 做不到。比如我要监测的是某个硬件传感器是否启动了呢?
    aibangjuxin
        3
    aibangjuxin  
       2019-03-04 10:35:01 +08:00
    /usr/bin/pgrep -o <process_name>
    where '-o' is the oldest (least recently started) of the matching processes
    JamesR
        4
    JamesR  
       2019-03-04 10:36:19 +08:00
    “某个特殊的程序”是你自己的程序吗?让它连接你的数据库,定时新增记录即可。
    或者用现成的进程监视工具,网上一搜有。
    mathzhaoliang
        5
    mathzhaoliang  
    OP
       2019-03-04 10:49:54 +08:00
    @JamesR 比如说我写一个车辆自动驾驶的系统,我要在系统启动时检测车载摄像头是否开始工作了,然后再去读取数据。
    kernel
        6
    kernel  
       2019-03-04 10:58:36 +08:00 via Android
    写个.service 文件,systemctl status
    tt67wq
        7
    tt67wq  
       2019-03-04 11:01:14 +08:00
    watchdog 监控日志可否?
    Lax
        8
    Lax  
       2019-03-04 11:05:23 +08:00
    去掉“比如”,把真正的需要说清楚吧,大家这么猜需求也不是办法。场景一变,方案就不适用了,你说是车载系统估计 1 楼也不会推荐内嵌 http。有子进程的时候可以 setprocname,参考 nginx。另外可以通过 ppid 来查看是否有父进程来判断
    fxxkgw
        9
    fxxkgw  
       2019-03-04 11:38:29 +08:00
    kill -0
    JamesR
        10
    JamesR  
       2019-03-04 11:40:58 +08:00
    @mathzhaoliang #5 这种一般只能是自己写脚本了吧,简陋点没关系,先能工作用起来。
    xomix
        11
    xomix  
       2019-03-04 14:06:12 +08:00   ❤️ 1
    这种需求常见两种解决方案:

    1、心跳方案:
    定时将心跳信息保存到指定位置(单独服务端 /数据库 /文件等,这里只是方便查询程序可以快速定位心跳信息,位置你自己按照需求定),查询方查询心跳信息发现无心跳信息即视为离线。

    2、被动回复方案:
    开启指定的查询返回方法( web/pipe/socket 等,这里的查询返回方法你自己和查询方确认即可。),查询方主动发起查询请求,返回结果,超时未返回视为离线。

    也有很多这两种方案结合的方案等,具体你需要根据自己的需求和实际资源去做。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4592 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:00 · PVG 18:00 · LAX 02:00 · JFK 05:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.