如何使用 C++ 在 Linux 中检测进程何时终止?
How to detect when a process is terminated in Linux using C++?
目的是我希望 Linux 上的程序 运行 在某些随机进程终止时终止。
我可以获得我的程序要监视的进程的 PID 或进程句柄。
有什么可行的方法吗?
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;
}
目的是我希望 Linux 上的程序 运行 在某些随机进程终止时终止。 我可以获得我的程序要监视的进程的 PID 或进程句柄。
有什么可行的方法吗?
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;
}