C语言有什么函数可以判断某进程是否存在
8个回答
展开全部
C语言没有库函数可以做到这一点。但是在Linux下,有一些替代方案。
见下:
基本思路是先定义一个FILE指针,用该指针接收popen()执行ps指令的返回值,再从指针中读取数据到缓存,根据得到的数据判断进程是否存在,怎么操作要看ps的参数了。
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<limits.h>
#define BUFSZ PIPE_BUF
void err_quit(char *msg)
{
perror(msg);
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[])
{
FILE* fp;
int count;
char buf[BUFSZ];
char command[150];
if(argc != 2)
{
printf("USAGE: example <process name>\n");
exit(EXIT_SUCCESS);
}
else
sprintf(command, "ps -C %s|wc -l", argv[1] );
if((fp = popen(command,"r")) == NULL)
err_quit("popen");
if( (fgets(buf,BUFSZ,fp))!= NULL )
{
count = atoi(buf);
if((count - 1) == 0)
printf("%s not found\n",argv[1]);
else
printf("process : %s total is %d\n",argv[1],(count - 1));
}
pclose(fp);
exit(EXIT_SUCCESS);
}
展开全部
可以遍历进程查找进程的PID跟进程名进行判断,这个需要操作系统提供支持,如果不用第三方库的话windows下是
#include<TlHelp32.h>
CreateToolhelp32Snapshot/*创建进程快照*/
Process32First/*获得第一个进程*/
Process32Next/*获得下一个进程*/
或者使用
#include<psapi.h>
EnumProcesses/*返回所有进程数组,可用于OpenProcess*/
来枚举进程,具体的可以查看MSDN获取帮助
#include<TlHelp32.h>
CreateToolhelp32Snapshot/*创建进程快照*/
Process32First/*获得第一个进程*/
Process32Next/*获得下一个进程*/
或者使用
#include<psapi.h>
EnumProcesses/*返回所有进程数组,可用于OpenProcess*/
来枚举进程,具体的可以查看MSDN获取帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用popen函数
然后用fgets函数读数据
检查输出结果
popen("ps -ef|grep proc_name|grep -v grep" ,"r" );
然后用fgets函数读数据
检查输出结果
popen("ps -ef|grep proc_name|grep -v grep" ,"r" );
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
OpenProcess();
函数原型:
HANDLE OpenProcess(
DWORD dwDesiredAccess, //渴望得到的访问权限(标志)
BOOL bInheritHandle, // 是否继承句柄
DWORD dwProcessId// 进程标示符
);
第三参数为进程ID,输入参数,
如进程存在,返回值为指定进程的句柄。
如进程不存在,返回值为空
函数原型:
HANDLE OpenProcess(
DWORD dwDesiredAccess, //渴望得到的访问权限(标志)
BOOL bInheritHandle, // 是否继承句柄
DWORD dwProcessId// 进程标示符
);
第三参数为进程ID,输入参数,
如进程存在,返回值为指定进程的句柄。
如进程不存在,返回值为空
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没说明系统是LINUX还是WINDOWS或者MAC,这个必须用到系统提供的API函数,每个系统提供的是不一样的,建议查API手册
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询