3

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

4

2 回答 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 回答