在 Linux 上,使用 C 语言获取程序进程(服务和守护进程)的方法主要涉及到系统调用和文件操作。以下是一个简单的示例,展示了如何使用 C 语言获取 Linux 上的所有进程信息。
#include<stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include<string.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
DIR *proc_dir;
struct dirent *entry;
proc_dir = opendir("/proc");
if (proc_dir == NULL) {
perror("Failed to open /proc directory");
return 1;
}
while ((entry = readdir(proc_dir)) != NULL) {
if (entry->d_type == DT_DIR) {
int pid = atoi(entry->d_name);
if (pid > 0) {
printf("PID: %d\n", pid);
}
}
}
closedir(proc_dir);
return 0;
}
这个示例程序会遍历 /proc
目录下的所有子目录,每个子目录对应一个进程,其名称为进程 ID。程序会打印出所有进程的 PID。
要获取进程的详细信息,可以读取 /proc/[pid]/status
文件。该文件包含了进程的详细状态信息,例如进程状态、内存使用情况、父进程 ID 等。
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
int pid = getpid();
char path[256];
FILE *file;
snprintf(path, sizeof(path), "/proc/%d/status", pid);
file = fopen(path, "r");
if (file == NULL) {
perror("Failed to open status file");
return 1;
}
char line[256];
while (fgets(line, sizeof(line), file) != NULL) {
printf("%s", line);
}
fclose(file);
return 0;
}
这个示例程序会打印出当前进程的状态信息。
要获取进程的命令行参数,可以读取 /proc/[pid]/cmdline
文件。该文件包含了进程的命令行参数,每个参数之间用 NULL 字符分隔。
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
int pid = getpid();
char path[256];
FILE *file;
snprintf(path, sizeof(path), "/proc/%d/cmdline", pid);
file = fopen(path, "r");
if (file == NULL) {
perror("Failed to open cmdline file");
return 1;
}
char arg[256];
while (fgets(arg, sizeof(arg), file) != NULL) {
printf("%s", arg);
}
fclose(file);
return 0;
}
这个示例程序会打印出当前进程的命令行参数。
要获取进程的环境变量,可以读取 /proc/[pid]/environ
文件。该文件包含了进程的环境变量,每个环境变量之间用 NULL 字符分隔。
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
int pid = getpid();
char path[256];
FILE *file;
snprintf(path, sizeof(path), "/proc/%d/environ", pid);
file = fopen(path, "r");
if (file == NULL) {
perror("Failed to open environ file");
return 1;
}
char env[256];
while (fgets(env, sizeof(env), file) != NULL) {
printf("%s", env);
}
fclose(file);
return 0;
}
这个示例程序会打印出当前进程的环境变量。
以上示例程序展示了如何使用 C 语言获取 Linux 上的进程信息,包括进程 ID、状态信息、命令行参数、环境变量等。这些信息可以用于监控进程状态、调试程序等。
云+社区技术沙龙[第10期]
第四期Techo TVP开发者峰会
Elastic 中国开发者大会
云原生安全实战加速仓
serverless days
云+社区技术沙龙[第5期]
小程序云开发官方直播课(应用开发实战)
“中小企业”在线学堂
云+社区技术沙龙[第14期]
领取专属 10元无门槛券
手把手带您无忧上云