![当进程开始运行时收到通知](https://linux22.com/image/624351/%E5%BD%93%E8%BF%9B%E7%A8%8B%E5%BC%80%E5%A7%8B%E8%BF%90%E8%A1%8C%E6%97%B6%E6%94%B6%E5%88%B0%E9%80%9A%E7%9F%A5.png)
我正在尝试找出一种方法,当我的某个进程再次开始运行时获取通知(我曾尝试监视 proc 文件但没有成功,monit 无法处理获取相同的 pid 并定期运行)。有什么想法吗?
答案1
在我看来,你的第一个想法关于使用 Monit 是最好的方法并且更为强大。
我尝试监控 proc 文件,但没有成功
告诉我们您遇到的问题,我们可以提供帮助。Monit 完全可以做到这一点。也许您的 Monit 配置存在错误。
monit 无法处理获取相同的 pid
是的,但你不必为此担心。Linux 系统管理进程的方式是,你永远不会得到与前一个相同的 PID。
- https://stackoverflow.com/questions/11323410/linux-pid-recycling
- https://unix.stackexchange.com/questions/26677/will-process-ids-be-recycled-what-if-you-reach-the-maximal-id
- http://en.wikipedia.org/wiki/Process_identifier
并且(Monit)定期运行
是的。Monit 默认的轮询间隔为 120 秒。如果这个延迟不适合您,您可以通过更改set daemon n (where n is a number in seconds - default 120)
配置文件中的参数值来减少轮询间隔。
答案2
也许是完全不同的东西。一个简单的包装。
编写一个 bash 脚本并将其放置在原始二进制文件的位置
#!/bin/bash
# put here commands to notify You
# optional commands to redirect fd to original processs if needed
exec /path/to/original/binary
您的问题没有详细说明您到底期望什么,但这可以完成工作。
答案3
您可以通过 Netlink 收到与进程相关的内核事件的通知。看这里例如代码。
答案4
您可以编写一个程序来获取进程列表并解析该列表并检测新进程。然后将“http xml 值传感器”添加到您的监控软件(cacti,...)并检查您的程序结果。
http://www.cyberciti.biz/faq/show-all-running-processes-in-linux/