栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

以编程方式确定程序是否正在运行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

以编程方式确定程序是否正在运行

您可以进入这些

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;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403126.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号