1. 直接遍历/proc目录

  

int find_pid_by_name( char* pidname, pid_t *pidlist)
{
#define READ_BUF_SIZE 256 DIR *dir;
struct dirent *next;
int i = 0; dir = opendir("/proc"); if (!dir)
{
printf("Cannot open /proc");
} while ((next = readdir(dir)) != NULL)
{
FILE *status;
char filename[READ_BUF_SIZE];
char buffer[READ_BUF_SIZE];
char name[READ_BUF_SIZE]; /* Must skip ".." since that is outside /proc */
if (strcmp(next->d_name, "..") == 0)
continue; /* If it isn't a number, we don't want it */
if (!isdigit(*next->d_name))
continue; sprintf(filename, "/proc/%s/status", next->d_name);
if (! (status = fopen(filename, "r")) )
{
continue;
} if (fgets(buffer, READ_BUF_SIZE-1, status) == NULL)
{
fclose(status);
continue;
} fclose(status); /* Buffer should contain a string like "Name: binary_name" */
sscanf(buffer, "%*s %s", name);
if (strcmp(name, pidname) == 0)
{
pidlist[i++] = strtol(next->d_name, NULL, 0);
}
} return i;
} int is_cap_running()
{
pid_t pid_list[128]; if(find_pid_by_name("capSrv", pid_list) > 1)
{
printf("capSrv already run, pid:%u \n",
(pid_list[0] == getpid()) ? pid_list[1] : pid_list[0]);
return 1;
}
else
{
return 0;
}
}

  

2. 调用pidof

char buf[256] = {0};
int pos = 0;
pid_t cur_pid = getpid(); char *cmd = "pidof capSrv";
FILE *file = popen(cmd, "r"); while(fgets(buf, 256, file) != NULL)
{
printf("%s fgets: %s \n", cmd, buf);
if(isdigit(buf[0]))
{
pclose(file); if(sscanf(buf,"%u %u", &pid[0],pid[1]) == 2)
{
printf("capSrv already run, pid:%u \n", (pid[0] == cur_pid) ? pid[1] : pid[0]);
return 1;
}
else
{
return 0;
}
}
}

 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. HCNA配置console线路密码aaa认证

    Please check whether system data has been changed, and save data in time Configuration console time ...

  2. Linux 信号表 signals

    Linux支持POSIX reliable signals和POSIX real-time signals. 信号处理 进程接受到信号之后会有一些默认的处理方式,如下为5种处理方式: type des ...

  3. IIS7 http自动跳转到https(通过编辑Web.config实现)

    本文摘自:https://www.cnblogs.com/wxbug/p/7054972.html 1.下载安装URL重写模块:Microsoft URL Rewrite Module 32位:htt ...

  4. 搭建TFTP服务器配置

    实验内容: TFTP是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂,开销不大的文件传输服务.TFTP承载在UDP上,提供不可靠的数据传输服务,不提供存取授权与认 ...

  5. 安装和使用nmon监测hadoop集群性能

    nmon是一个非常易用的监测Unix/Linux系统性能的小工具,可以在一个屏幕上通过指令切换,显示几乎你想要的所有指标,并且可以自动将指标周期性的保存成 .nmon格式文件,这个工具可以与nmon_ ...

  6. springmvc--jsp页面乱码

    最近想做一个平台,花时间学习springmvc.现在把零散的问题做总结 A页面写数据,一个post请求,B页面负责数据接收和显示,但是在B页面中输入中文确乱码了 A页面如下 B页面展示如下 B页面的j ...

  7. P1424 小鱼的航程(改进版)

    题目背景 原来的题目太简单,现改进让小鱼周末也休息,请已经做过重做该题. 题目描述 有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日),假设从周x(1<=x&l ...

  8. 2018.8.15 AOP面向切面编程简单理解

    在Filter过滤器中 拦截器 表面上看 -拦截器帮我们封装了很多功能 拦截器优秀的设计,可拔插设计 aop思想 在struts2中 归纳总结

  9. css3中的 @Keyframes

    一.介绍 keyframes被称为关键帧,其类似于Flash中的关键帧.在CSS3中其主要以“@keyframes”开头,后面跟着是动画名称加上一对花括号“{…}”,括号中是一些不同时间段样式规则. ...

  10. C语言中%p,%u,%lu都有什么用处

    %p表示输出这个指针, %d表示后面的输出类型为有符号的10进制整形, %u表示无符号10进制整型, %lu表示输出无符号长整型整数 (long unsigned)