您可以进入这些
pid条目
/proc并在
cmdline文件中检查过程,也可以
readlink在
exe链接上执行操作(以下使用第一种方法)。
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <dirent.h>#include <sys/types.h>pid_t proc_find(const char* name) { DIR* dir; struct dirent* ent; char* endptr; char buf[512]; if (!(dir = opendir("/proc"))) { perror("can't open /proc"); return -1; } while((ent = readdir(dir)) != NULL) { long lpid = strtol(ent->d_name, &endptr, 10); if (*endptr != ' ') { continue; } snprintf(buf, sizeof(buf), "/proc/%ld/cmdline", lpid); FILE* fp = fopen(buf, "r"); if (fp) { if (fgets(buf, sizeof(buf), fp) != NULL) { char* first = strtok(buf, " "); if (!strcmp(first, name)) { fclose(fp); closedir(dir); return (pid_t)lpid; } } fclose(fp); } } closedir(dir); return -1;}int main(int argc, char* argv[]) { if (argc == 1) { fprintf("usage: %s name1 name2 ...n", argv[0]); return 1; } int i; for(int i = 1; i < argc; ++i) { pid_t pid = proc_find(argv[i]); if (pid == -1) { printf("%s: not foundn", argv[i]); } else { printf("%s: %dn", argv[i], pid); } } return 0;}


