1. 直接遍历/proc目录

  

  1. int find_pid_by_name( char* pidname, pid_t *pidlist)
  2. {
  3. #define READ_BUF_SIZE 256
  4.  
  5. DIR *dir;
  6. struct dirent *next;
  7. int i = 0;
  8.  
  9. dir = opendir("/proc");
  10.  
  11. if (!dir)
  12. {
  13. printf("Cannot open /proc");
  14. }
  15.  
  16. while ((next = readdir(dir)) != NULL)
  17. {
  18. FILE *status;
  19. char filename[READ_BUF_SIZE];
  20. char buffer[READ_BUF_SIZE];
  21. char name[READ_BUF_SIZE];
  22.  
  23. /* Must skip ".." since that is outside /proc */
  24. if (strcmp(next->d_name, "..") == 0)
  25. continue;
  26.  
  27. /* If it isn't a number, we don't want it */
  28. if (!isdigit(*next->d_name))
  29. continue;
  30.  
  31. sprintf(filename, "/proc/%s/status", next->d_name);
  32. if (! (status = fopen(filename, "r")) )
  33. {
  34. continue;
  35. }
  36.  
  37. if (fgets(buffer, READ_BUF_SIZE-1, status) == NULL)
  38. {
  39. fclose(status);
  40. continue;
  41. }
  42.  
  43. fclose(status);
  44.  
  45. /* Buffer should contain a string like "Name: binary_name" */
  46. sscanf(buffer, "%*s %s", name);
  47. if (strcmp(name, pidname) == 0)
  48. {
  49. pidlist[i++] = strtol(next->d_name, NULL, 0);
  50. }
  51. }
  52.  
  53. return i;
  54. }
  55.  
  56. int is_cap_running()
  57. {
  58. pid_t pid_list[128];
  59.  
  60. if(find_pid_by_name("capSrv", pid_list) > 1)
  61. {
  62. printf("capSrv already run, pid:%u \n",
  63. (pid_list[0] == getpid()) ? pid_list[1] : pid_list[0]);
  64. return 1;
  65. }
  66. else
  67. {
  68. return 0;
  69. }
  70. }

  

2. 调用pidof

  1. char buf[256] = {0};
  2. int pos = 0;
  3. pid_t cur_pid = getpid();
  4.  
  5. char *cmd = "pidof capSrv";
  6. FILE *file = popen(cmd, "r");
  7.  
  8. while(fgets(buf, 256, file) != NULL)
  9. {
  10. printf("%s fgets: %s \n", cmd, buf);
  11. if(isdigit(buf[0]))
  12. {
  13. pclose(file);
  14.  
  15. if(sscanf(buf,"%u %u", &pid[0],pid[1]) == 2)
  16. {
  17. printf("capSrv already run, pid:%u \n", (pid[0] == cur_pid) ? pid[1] : pid[0]);
  18. return 1;
  19. }
  20. else
  21. {
  22. return 0;
  23. }
  24. }
  25. }

 3. ps 

linux 检测进程是否存在的更多相关文章

  1. Linux下检测进程是否存在

    这个问题看起来好像很简单,"ps -ef | grep xx"一下就行啦!这样做当然可以,但是如果我们考究起性能来,这恐怕不是个好办法. 假设我们现在要监测某进程是否存活,每分钟检 ...

  2. Linux文件锁flock ,检测进程是否已经存在

    在多个进程同时操作同一份文件的过程中,很容易导致文件中的数据混乱,需要锁操作来保证数据的完整性,这里介绍的针对文件的锁,称之为“文件锁”-flock.  头文件:#include<sys/fil ...

  3. Linux查看进程线程个数

    1.根据进程号进行查询: # pstree -p 进程号 # top -Hp 进程号 2.根据进程名字进行查询: # pstree -p `ps -e | grep server | awk '{pr ...

  4. linux守护进程、SIGHUP与nohup详解

    前端时间帮忙定位个问题.docker容器故障恢复后,其中的keepalived进程始终无法启动,也看不到Keepalived的日志. strace 查看系统调用之后,发现了原因所在 socket(PF ...

  5. .Neter玩转Linux系列之五:crontab使用详解和Linux的进程管理以及网络状态监控

    一.crontab使用详解 概述:任务调度:是指系统在某个时间执行的特定的命令或程序. 任务调度分类: (1)系统工作:有些重要的工作必须周而 复始地执行. (2)个别用户工作:个别用户可能希望执 行 ...

  6. 用于检测进程的shell脚本代码小结

    本文介绍一段shell脚本,它可以检测某进程或某服务是否正在运行,然后以邮件通知.有需要的朋友参考下 一个简单的shell脚本,用来找出关键的服务是否正在运行,适用于Linux操作系统或Unix操作系 ...

  7. linux根据进程号PID查找启动程序的全路径

    linux根据进程号PID查找启动程序的全路径 2014-01-25 11:09 18629人阅读 评论(0) 收藏 举报  分类: Linux系统管理(29)  版权声明:本文为博主原创文章,未经博 ...

  8. linux管理进程的链表

    linux2.6.11的内核中,为了方便管理linux的进程,主要建了5种linux链表.每个链表节点之间的互联有两种方式,一种是hash节点之间的互联,通过hlist_node的数据结构来实现:另一 ...

  9. [转载]了解Linux的进程与线程

    本文转自Tim Yang的博客http://timyang.net/linux/linux-process/ .对于理解Linux的进程与线程非常有帮助.支持原创.尊重原创,分享知识! 上周碰到部署在 ...

随机推荐

  1. SQL中的聚合函数

    聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用,SQL SERVER 中具体的聚合函数如下:1. AVG 返回指定组中的平均值,空值被忽略. 例 ...

  2. 笨办法学Python(二十二)

    习题 22: 到现在你学到了哪些东西? 这节以及下一节的习题中不会有任何代码,所以也不会有习题答案或者加分习题.其实这节习题可以说是一个巨型的加分习题.我将让你完成一个表格,让你回顾你到现在学到的所有 ...

  3. python 造轮子(一)——序列与字典

    虽然说造轮子很少用了,什么底层东西很少写,但是还是很想学扎实,还是好多东西还是的会,没有底层的支持,比较高级的库学起来还是很困难的. 序列的普遍用法: #-*-coding:utf8-*- #索引 l ...

  4. DFS+BFS(POJ3083)

    题目链接:http://poj.org/problem?id=3083 解题报告:这个题目,搜最短路,没有什么问题.优先走左边,走右边,有很多说法,思路大概都相同,都是记录当前朝向,根据数学公式(i+ ...

  5. 3.vue引入axios全局配置

    前言: Vue官方推荐使用axios来进行异步访问. axios文档参考:axios中文文档 开始搭建: 1.引入axios (1)打开终端 win+R (2)切换到项目路径: g: cd Webap ...

  6. EBS R12中FND凭证打印警告:OPP响应超时

    接近年关,最近年结忙的飞起,此为背景,今天运维那边反应日记账凭证打印报错,看了下后台请求发现请求有警告. 查看日志发现报了“并发:OPP响应超时”的警告,这个地方响应超时可能是配置文件中“并发:OPP ...

  7. Java日志框架介绍

    一.序言 日志为系统的必不可少的一部分,通过输出的日志我们可以排查线上出现的各种问题,就像断案的线索一样.我们还可以通过日志数据分析用户的行为习惯做大数据分析. 二.日志框架分类及其历史 框架的种类: ...

  8. shell编程中的vim命令说明

    vim命令模式:  1.一般命令模式 2.编辑模式 3.底行命令行命令模式 一般命令模式 直接用字符操作编辑模式 可以写文档(跟txt有点像)底行命令模式 先按'ESC',在按下“:”,之后在输出命令 ...

  9. EAIntroView–高度可定制的iOS应用欢迎页通用解决方案

    简介 高度可定制的应用欢迎页通用解决方案,可高度定制,不要仅限于现有的demo. 项目主页: EAIntroView 最新示例: 点击下载 入门 安装 安装后,引入” EAIntroView.h”并设 ...

  10. Redis 4.0 从节点写入不同步问题

    redis4.0出现了很多新的特性,删除键值unlink,slowlog记录来源ip.内存统计信息等.其中一个重要的同步祭祀是Psync2.psync2主要让redis在从实例重启和主实例故障切换场景 ...