确定进程是否已暂停

时间:2013-03-11 03:48:21

标签: c++ c process operating-system signals

我尝试向特定进程发送SIGTSTP信号,但是如何确定进程是否在Linux中使用C库函数或系统调用实际上已暂停?

2 个答案:

答案 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;
        }
    }