我尝试向特定进程发送SIGTSTP信号,但是如何确定进程是否在Linux中使用C库函数或系统调用实际上已暂停?
答案 0 :(得分:6)
从/proc/[pid]/stat
读取。
从man page,您可以从此文件中获取进程的状态:
州%c
字符串“RSDZTW”中的一个字符,其中R正在运行,S是 在一个可中断的等待中睡觉,D正在等待不间断的 磁盘休眠,Z是僵尸,T被跟踪或停止(在信号上)和W 正在传呼。
答案 1 :(得分:0)
我知道这是一篇老文章,但是对于像我一样好奇的人!
一个简单的答案是,只有一种STATIC一致的状态检查方法可以从/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;
}
}