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