C语言实现P命令
时间: 2023-07-07 08:13:58 浏览: 48
在Linux系统中,P命令是指查看当前所有进程的状态和信息。你可以使用C语言中的系统调用来实现P命令。以下是一个简单的实现示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
int main() {
DIR* proc_dir;
struct dirent* proc_entry;
char path[256];
char stat_path[256];
char line[1024];
FILE* fp;
int pid;
char comm[256];
char state;
int ppid;
int pgrp;
int session;
int tty_nr;
int tpgid;
unsigned int flags;
unsigned long minflt;
unsigned long cminflt;
unsigned long majflt;
unsigned long cmajflt;
unsigned long utime;
unsigned long stime;
long int cutime;
long int cstime;
long int priority;
long int nice;
long int num_threads;
long int itrealvalue;
unsigned long long starttime;
// 打开/proc目录
proc_dir = opendir("/proc");
if (proc_dir == NULL) {
perror("打开/proc目录失败");
exit(EXIT_FAILURE);
}
// 遍历/proc目录下的所有进程
while ((proc_entry = readdir(proc_dir)) != NULL) {
// 检查是否是数字型目录名
if (isdigit(proc_entry->d_name[0])) {
// 构造状态文件路径
snprintf(path, 256, "/proc/%s", proc_entry->d_name);
snprintf(stat_path, 256, "%s/stat", path);
// 打开状态文件
fp = fopen(stat_path, "r");
if (fp == NULL) {
perror("打开状态文件失败");
exit(EXIT_FAILURE);
}
// 读取状态文件的第一行
fgets(line, 1024, fp);
// 解析进程信息
sscanf(line, "%d %s %c %d %d %d %d %d %u %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld %ld %llu",
&pid, comm, &state, &ppid, &pgrp, &session, &tty_nr, &tpgid, &flags, &minflt, &cminflt, &majflt, &cmajflt, &utime, &stime, &cutime, &cstime, &priority, &nice, &num_threads, &itrealvalue, &starttime);
// 输出进程信息
printf("PID:%d\tCOMM:%s\tSTATE:%c\tPPID:%d\tPGRP:%d\tSESSION:%d\n", pid, comm, state, ppid, pgrp, session);
// 关闭文件
fclose(fp);
}
}
// 关闭目录
closedir(proc_dir);
return 0;
}
```
这个示例中,程序打开了`/proc`目录,并遍历该目录下的所有进程目录。对于每个进程目录,程序读取`/proc/[pid]/stat`文件的第一行,并解析出进程的基本信息,包括PID、命令名称、状态、父进程ID等。程序最终输出所有进程的基本信息。