gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:04:17 26 4
gpt4 key购买 nike

给定一个进程的 pid,我如何确定该进程是暂停(使用 SIGSTOP)还是正在运行?

我使用的是 OS X,所以我没有 /proc 目录。

最佳答案

这是你的做法:

#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;
}

关于c - 使用 C 在 OS X 上确定进程是否暂停(使用 SIGSTOP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17005901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com