
如题,我现在要写一个监测程序,目的是判断系统中某个特殊的程序 /进程是否正在运行。我所知道的是用 pgrep 命令查看某个程序名的所有进程名字,但是这样是否太笨了?而且无法判断哪个是主进程。请问有什么好的方法没有?
PS: 系统可以理解为 linux。
1 ic2y 2019 年 3 月 4 日 强制要求所有的程序内嵌 http 服务,进行 状态检测和 负载信息收集。 |
2 mathzhaoliang OP @ic2y 做不到。比如我要监测的是某个硬件传感器是否启动了呢? |
3 aibangjuxin 2019 年 3 月 4 日 /usr/bin/pgrep -o <process_name> where '-o' is the oldest (least recently started) of the matching processes |
4 JamesR 2019 年 3 月 4 日 “某个特殊的程序”是你自己的程序吗?让它连接你的数据库,定时新增记录即可。 或者用现成的进程监视工具,网上一搜有。 |
5 mathzhaoliang OP @JamesR 比如说我写一个车辆自动驾驶的系统,我要在系统启动时检测车载摄像头是否开始工作了,然后再去读取数据。 |
6 kernel 2019 年 3 月 4 日 via Android 写个.service 文件,systemctl status |
7 tt67wq 2019 年 3 月 4 日 watchdog 监控日志可否? |
8 Lax 2019 年 3 月 4 日 去掉“比如”,把真正的需要说清楚吧,大家这么猜需求也不是办法。场景一变,方案就不适用了,你说是车载系统估计 1 楼也不会推荐内嵌 http。有子进程的时候可以 setprocname,参考 nginx。另外可以通过 ppid 来查看是否有父进程来判断 |
9 fxxkgw 2019 年 3 月 4 日 kill -0 |
10 JamesR 2019 年 3 月 4 日 @mathzhaoliang #5 这种一般只能是自己写脚本了吧,简陋点没关系,先能工作用起来。 |
11 xomix 2019 年 3 月 4 日 这种需求常见两种解决方案: 1、心跳方案: 定时将心跳信息保存到指定位置(单独服务端 /数据库 /文件等,这里只是方便查询程序可以快速定位心跳信息,位置你自己按照需求定),查询方查询心跳信息发现无心跳信息即视为离线。 2、被动回复方案: 开启指定的查询返回方法( web/pipe/socket 等,这里的查询返回方法你自己和查询方确认即可。),查询方主动发起查询请求,返回结果,超时未返回视为离线。 也有很多这两种方案结合的方案等,具体你需要根据自己的需求和实际资源去做。 |