linux有一个命令行工具叫做pidof,可以根据用户输入的进程名字查找到进程号,但有时候我们需要在程序里实现,不想调用system,在查阅了很多版本的pidof源代码后,没有发现一个自己感觉比较好的,所以就参照linux上的pidof的源代码,改写出了一版,供大家参考使用。
/*************************************************************************** * File name : findpidbyname.c * Function : like pidof * Author : zhangzhao@tass.com.cn * Date : 2012/12/ * Version : v1.0 * Description : Find process's pid by name in linux. * ModifyRecord : ****************************************************************************/ #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <stdlib.h> #include <string.h> int find_pid_by_name( char* ProcName, int* foundpid) { DIR *dir; struct dirent *d; int pid, i; char *s; int pnlen; i = 0; foundpid[0] = 0; pnlen = strlen(ProcName); /* Open the /proc directory. */ dir = opendir("/proc"); if (!dir) { printf("cannot open /proc"); return -1; } /* Walk through the directory. */ while ((d = readdir(dir)) != NULL) { char exe [PATH_MAX+1]; char path[PATH_MAX+1]; int len; int namelen; /* See if this is a process */ if ((pid = atoi(d->d_name)) == 0) continue; snprintf(exe, sizeof(exe), "/proc/%s/exe", d->d_name); if ((len = readlink(exe, path, PATH_MAX)) < 0) continue; path[len] = '