使用C确定OS X上的进程是否暂停(使用SIGSTOP)

Tyi*_*ilo 5 c macos signals

给定进程'pid,如何确定进程是暂停(使用SIGSTOP)还是正在运行?

我正在使用OS X,所以我没有/proc目录.

Tyi*_*ilo 2

您可以这样做:

#include <stdio.h>
#include <sys/sysctl.h>
#include <stdlib.h>
#include <string.h>

#define IS_RUNNING(proc) ((proc->kp_proc.p_stat & SRUN) != 0)

#define ERROR_CHECK(fun) \
    do { \
        if(fun) { \
            goto ERROR; \
        }\
    } while(0)

struct kinfo_proc *proc_info_for_pid(pid_t pid) {
    struct kinfo_proc *list = NULL;

    int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid};
    size_t size = 0;

    ERROR_CHECK(sysctl(mib, sizeof(mib) / sizeof(*mib), NULL, &size, NULL, 0));

    list = malloc(size);
    ERROR_CHECK(sysctl(mib, sizeof(mib) / sizeof(*mib), list, &size, NULL, 0));

    return list;

ERROR:
    if(list) {
        free(list);
    }
    return NULL;
}

int main() {
    pid_t pid = 1000;
    struct kinfo_proc *proc_info = proc_info_for_pid(pid);
    if(proc_info) {
        printf("Is running: %d\n", IS_RUNNING(proc_info));
    } else {
        printf("Could not stat process!");
        return 1;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)