#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
FILE *fp;
char path[1024];
char search_app[50];
char run_command[100];
char running_apps[50][1000];
int i = 0;
// 输入你要查找的应用的名称
printf("请输入你要查找的应用的名称: ");
scanf("%s", search_app);
//将用户输入要查找的应用名字和ps的命令组合成一个命令
sprintf(run_command, "ps aux | grep -v grep | grep %s ", search_app);
// 打开一个管道,执行ps命令,查找运行中的应用
fp = popen(run_command, "r");
if (fp == NULL) {
printf("无法执行ps命令\n");
exit(1);
}
// 读取ps命令的输出,查找运行中的应用
while (1) {
/*
fgets 获取一行输出,当程序运行ps aux | grep -v grep | grep search_app,
这个命令的时候,可能得到的结果是多行的输出,所以需要一行一行的输出出来。
一行最大读取的字符数是sizeof(path)-1,如果这一行不足sizeof(path)-1这么长的字符,将读到多少就获取多少,
如果一行大于sizeof(path)-1长的字符,将读取到sizeof(path)-1个字符。
*/
char *string = fgets(path, sizeof(path)-1, fp);
if (string != NULL) {
printf("reading pipe get a string: %s \n",string);
strcpy(running_apps[i], path);
i++;
} else {
break; //读取结束后将打破while循环
}
}
pclose(fp); //关闭管道
// 判断应用是否在运行
if (i > 0) {
printf("应用正在运行\n");
for (int j = 0; j < i; j++) {
printf("%s\n", running_apps[j]);
}
} else {
printf("应用没有运行\n");
}
return 0;
}
12-21
1584

12-27
1225
