分析:通过cmd指令(windows平台tasklist/Linux平台ps -aux)可以查看到进程名称,然后通过字符串进行匹配。
注意点:output的空间需要足够大,不然会有溢出的错误。
windows:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void execmd(char *cmd, char *result)
{
char buffer[128] = { 0 };//定义一个字符串缓冲区
FILE *pipe = _popen(cmd, "r");//创建一个管道,执行指令,把管道当做文件来处理
if (NULL == pipe)
{
printf("运行失败");
return;
}
else
{
while (!feof(pipe))//判断是否到了文件末尾,没有到末尾就继续
{
if (fgets(buffer, 128, pipe))//读取文件的缓冲区
{
strcat(result, buffer);//连接字符串,将结果保存到result
}
}
_pclose(pipe);//关闭管道的作用
return;
}
}
void main()
{
char output[1024*10] = { 0 };//定义一个字符串,接受输出
execmd("tasklist", output);//执行指令,将结果保存到output
printf("%s", output);//输出结果
if (strstr(output, "Fetion.exe") == NULL)
{
printf("飞信不存在\n");
}
else
{
printf("飞信存在\n");
}
system("pause");
}
linux:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void execmd(char *cmd, char *result)
{
char buffer[128] = { 0 };//定义一个字符串缓冲区
FILE *pipe = popen(cmd, "r");//创建一个管道,执行指令,把管道当做文件来处理
if (NULL == pipe)
{
printf("运行失败\n");
return;
}
else
{
while (!feof(pipe))//判断是否到了文件末尾,没有到末尾就继续
{
if (fgets(buffer, 128, pipe))//读取文件的缓冲区
{
strcat(result, buffer);//连接字符串,将结果保存到result
}
}
pclose(pipe);//关闭管道的作用
return;
}
}
void main()
{
char output[1024*100] = { 0 };//定义一个字符串,接受输出
execmd("ps -aux", output);//执行指令,将结果保存到output
printf("%s", output);//输出结果
if (strstr(output, "smbd -F") == NULL)
{
printf("不存在\n");
}
else
{
printf("存在\n");
}
}