从/proc/<;获取pid和其他流程信息;pid>/地位
我需要从从/proc/<;获取pid和其他流程信息;pid>/地位,c,linux,C,Linux,我需要从/proc/pid/status 我尝试过这样做: #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <fcntl.h> #include <sys/procfs.h> #incl
/proc/pid/status
我尝试过这样做:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <fcntl.h>
#include <sys/procfs.h>
#include <sys/signal.h>
#include <sys/syscall.h>
#include <sys/param.h>
int main(){
char buf[BUFSIZ], buffer[10];
char pathbase[20], pathdir[20];
FILE *fp;
prstatus_t status;
printf("Process ID: %d\n", getpid());
printf("Parent process ID: %d\n", getppid());
printf("Group ID: %d\n", getpgrp());
printf("Session ID: %d\n", getsid(0));
strcpy(pathbase,"/proc/");
sprintf(buffer, "%d", getpid());
strcat(pathbase, buffer);
strcpy(pathdir, pathbase);
strcat(pathdir,"/status");
if((fp = fopen(pathdir, "r")) == NULL) perror("fopen");
fread(&status, sizeof(prstatus_t), 1, fp);
printf("Proces id: %d\n", status.pr_pid);
printf("Proces ppid: %d\n", (int)status.pr_ppid);
fclose(fp);
}
问题是
/proc/[pid]/status
是一个文本文件。因此,您的fread
正在将文本复制到结构状态
——因此所有内容看起来都像胡言乱语
您可以逐行读取状态文件,也可以使用
/proc/[pid]/stat
文件,该文件在一行中包含相同的信息(status
用于人类消费,而stat
用于程序消费)。要获取进程id(或任何其他信息),您只需标记这一行。您是否尝试从shellcat/proc/$$/status
中获取?正如您将看到的,它是一个文本文件,而不是二进制文件,因此您应该一次读取一行,并将其解析为文本。这里的状态是无用的。
Process ID: 5474
Parent process ID: 3781
Group ID: 5474
Session ID: 3781
Proces id: 1735289198
Proces ppid: 1733560873