我尝试向特定进程发送 SIGTSTP 信号,但如何确定该进程是否已在 Linux 中使用 C 库函数或系统调用实际挂起?
问问题
1645 次
2 回答
6
从 读取/proc/[pid]/stat
。
从手册页,您可以从此文件中获取进程的状态:
状态 %c
字符串“RSDZTW”中的一个字符,其中 R 正在运行,S 在可中断等待中休眠,D 在不可中断磁盘休眠中等待,Z 是僵尸,T 被跟踪或停止(在信号上),W 是分页。
于 2013-03-11T03:55:00.967 回答
1
我知道这是一篇旧帖子,但对于像我一样好奇的人!
简单的答案是,只有一种静态的、一致的方式来检查状态,即 from /proc/[pid]/stat
,但是如果你想尽可能少地依赖架构并且不想这样做,你可以检查信号。
信号只能看到一次,因此您必须自己跟踪它,但waitpid
可以点击一个进程以查看自上次检查以来是否收到任何信号:
BOOL is_suspended;
int status;
pid_t result = waitpid(pid, &status, WNOHANG | WUNTRACED | WCONTINUED);
if(result > 0) { // Signal has been received
if (WIFSTOPPED(status)) {
is_suspended = true;
} else if (WIFCONTINUED(status)) {
is_suspended = false;
}
}
于 2019-08-05T23:50:47.553 回答