【问题标题】:How to detect when a process is terminated in Linux using C++?如何使用 C++ 在 Linux 中检测进程何时终止?
【发布时间】:2020-10-02 23:02:02
【问题描述】:

目的是我希望在某个随机进程终止时终止我在 Linux 上运行的程序。 我可以获取程序要监控的进程的 PID 或进程句柄。

我可以采取任何可能的方法吗?

【问题讨论】:

  • 这能回答你的问题吗? Check if process exists given its pid
  • 在 BSD 领域很容易,但我从来没有找到在 Linux 中处理无关进程的好方法。
  • @kaylum 不,它没有,因为这是关于进程是否死亡的一次性检查,但这是关于在进程死亡时得到通知。

标签: c++ linux process system-calls


【解决方案1】:

Linux 5.3 引入了pidfd_open,它允许您从 PID 获取文件描述符。当进程终止时,FD 将变得可读,您可以使用select/poll/epoll 检测到,如下所示:

#include <iostream>
#include <sys/types.h>
#include <sys/select.h>
#include <sys/syscall.h>
#include <unistd.h>

int main(void) {
    pid_t pid;
    std::cin >> pid;
    int pidfd = syscall(SYS_pidfd_open, pid, 0);
    if(pidfd < 0) {
        perror("pidfd_open");
        return 1;
    }
    fd_set readfds;
    FD_ZERO(&readfds);
    FD_SET(pidfd, &readfds);
    if(select(pidfd + 1, &readfds, nullptr, nullptr, nullptr) != 1) {
        perror("select");
        return 1;
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2011-07-10
    • 1970-01-01
    • 2010-11-05
    • 2010-09-12
    相关资源
    最近更新 更多