c - 设计一个监控进程来监控和重启进程

标签 c process unix

我正在设计一个监控过程。监控进程的工作是监控几组已配置的进程。当监控进程检测到某个进程宕机时,需要重启该进程。

我正在为我的 linux 系统开发代码。这是我开发小型原型(prototype)的方法
- 提供有关需要监控的各种进程的详细信息(路径、参数)。 - 监控进程做了以下事情:
1. 为 SIGCHLD 安装信号处理程序
2.一个fork和execv来启动被监控的进程。存储子进程的pid。
3.当 child 宕机时, parent 收到一个SIGCHLD
4. 现在将调用信号处理程序。处理程序将在之前存储的 pid 列表上运行 for 循环。对于每个 pid,它将检查/proc 文件系统是否存在与该 pid 对应的目录。如果该目录不存在,则重新启动该过程。

现在,我的问题是
- 上述方法(检查/proc 文件系统)是检查进程是否正在运行的标准或推荐机制,还是我应该为 ps 命令创建管道并循环遍历 ps 的输出?
- 有没有更好的方法来满足我的要求?

问候。

最佳答案

你不应该检查 /proc确定哪个进程已退出 - 另一个不相关的进程可能同时启动并巧合地分配相同的 PID。

相反,在您的 SIGCHLD处理程序,您应该使用 waitpid()系统调用,在一个循环中,例如:

int status;
pid_t child;

while ((child = waitpid(-1, &status, WNOHANG)) > 0)
{
    /* Process with PID 'child' has exited, handle it */
}

(循环是必要的,因为多个子进程可能会在短时间内退出,但可能只会产生一个 SIGCHLD)。

关于c - 设计一个监控进程来监控和重启进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4126401/

相关文章:

linux - 如何在管道的两侧使用 sudo -u

c - gdbus 库名称是什么?技术找到它?

Linux,子进程超时

php - Symfony 执行长时间运行的脚本

c++ - 在新进程中运行方法并等待它们完成

c - 使用 C 中的线程从命令行反转字符串 - 段错误

c++ - 使用系统调用处理退出状态

c - 需要帮助理解功能逻辑

c - 除非在特定条件下,否则如何消除显示的数字序列?

c - c中的嵌套链表