linux 进程检测,linux 检测进程是否存在

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下检测进程是否存在

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

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

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

Linux查看进程线程个数

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

linux守护进程、SIGHUP与nohup详解

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

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

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

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

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

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

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

linux管理进程的链表

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

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

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

随机推荐

高性能JavaScript 达夫设备

前言 在一书的第四章算法和流程控制中,提到了减少迭代次数加速程序的策略—达夫设备(Duff's device).达夫设备本身很好理解,但是其效果是否真的像书中 ...

Xcode 文件删除拷贝 出现的问题

当删除一个组的时候,不管是下面的两个选择,是彻底删除还是不彻底: 然后又要往工程里拷贝进去  同名  文件组,最好是选择Creat groups (因为创建groups就不会有import的时候,还需 ...

高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化

高性能Linux服务器 第10章    基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...

C# 关于委托和事件的妙文

C# 关于委托和事件的妙文: 通过一个例子详细介绍委托和事件的作用:Observer模式简介 转自:http://blog.csdn.net/susan19890313/article/details ...

【canvas系列】用canvas实现一个colorpicker

每个浏览器都有自己的特点,比如今天要做的colorpicker就是,一千个浏览器,一千个哈姆雷特,一千个colorpicker.今天canvas系列就用canvas做一个colorpicker. ** ...

贼有意思[最长上升公共子序列](SAC大佬测试题)

题目描述Awson 最近越来越蠢了,一天就只知道 zyys.他定义了一个 zyys 数列:这个数列满足:1.是另外两个数列 A,B 的公共子序列;2.数列单调递增.现在他有一个问题,我们假设知道两个长 ...

Spring的PropertyPlaceholderConfigurer

在项目中我们一般将配置信息(如数据库的配置信息)配置在一个properties文件中,如下: jdbcUrl=jdbc:mysql://localhost:3306/flowable?useUnico ...

Servlet基本_Filter

1.概念・サーブレットフィルタとは.サーブレットやJSPの「共通の前後処理」を記述するための仕組みです.・フィルタはサーブレットやJSPの前に位置し.実行前と後に.リクエスト.レスポンスに対して任意の ...

java8 - 2

import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util. ...

python第三方包的windows安装文件exe格式

今天弄了一上午的python-ldap,发现要么安装vc,要么用其他比较麻烦的方法,都比较麻烦.幸好找到这个地址: http://www.lfd.uci.edu/~gohlke/pythonlibs/ ...

你可能感兴趣的:(linux,进程检测)