linux shell 判断进程是否存在

linux shell 判断进程是否存在,第1张

如果你是通过一个进程的名字作为关键词来查找进程是否存在的话,可使用

ps -ef | grep "<关键词>" | wc -l

输出为0表示不存在,输出大于0,表示存在,且数字就是这个关键词进程的个数;

如果你是通过进程号PID来查找进程是否存在,可以使用

ps --no-heading <PID>| wc -l

同样,

输出为0表示不存在,输出=1,表示存在,因为进程号不可能重复,所以输出肯定非0即1

1、ps 是一个shell里面的命令,用来输出当前进程状态的。想知道详细用法可以在linux命令行中输入: man ps

2、"ABNORMAL",注意这是一个字符串常量,因为在C语言中使用双引号可以定义一个字符串常量。这个字符串可以是程序员自己随便写的,就像"hello word" 一样。"ABNORMAL"表示不正常的意思。

3、ERROR、CONFLICT、NOERROR三个常量,可以使用#define语句进行定义。至于是在哪个头文件中定义很难说。我建议你可以在当前的.c文件开始的地方自己定义一下,例如:

#include <stdio.h>

... /*其他的头文件等等*/

#define ERROR -1

#define CONFLICT 1

#define NOERROR 0

... /*其他的函数*/

int detect_process(char * process_name)

{

FILE *ptr

char buff[512]

char ps[128]

sprintf(ps,"ps -e | grep -c ' %s</p>",process_name)

strcpy(buff,"ABNORMAL")

if((ptr=popen(ps, "r")) != NULL)

{

while (fgets(buff, 512, ptr) != NULL)

{

if(atoi(buff)>=2)

{

pclose(ptr)

return CONFLICT

}

}

}

if(strcmp(buff,"ABNORMAL")==0) /*ps command error*/

return ERROR

pclose(ptr)

return NOERROR

}

请注意:里面有个popen() pclose()函数,是通过管道创建一个进程,这两个函数必须要有<stdio.h>文件。具体的参数可以参看百度百科:http://baike.baidu.com/view/2445803.htm?fr=aladdin。

atoi()函数能将字符串转换成整型数。参考百度百科:http://baike.baidu.com/view/653935.htm。

4、整个程序的意思是:

(1)使用"ps"命令,将结果保存到ps变量中,注意sprintf的第一个参数是一个char数组。

(2)将"ABNORMAL"字符串保存到buff变量中,buff也是一个char数组。

(3)使用popen()函数创建一个进程,并将这个进程定向到标准输出(也就是显示器上)。

(4)将进程的输入出存到buff变量中,然后将其转化为数字

(5)如果这个数字>=2说明发生了冲突,返回CONFLICT

(6)在循环之后,比较一下,如果buff一直是"ABNORMAL",说明ps 命令出错,返回ERROR

(7)否则返回NOERROR

综上:ERROR、CONFLICT、NOERROR几个变量只是作为函数返回值,告诉函数调用者这次调用的结果而已,所以完全可以自己定义。除非你们公司已经规定了ERROR必须是某个值,不然你是可以自己定义的,只是在以后调用detect_process()函数的时候记得什么返回值对应什么结果就行了。

自己定义就是在.c文件开头使用#define 好了。

ps命令用于查看系统中的进程状态,格式为:“ps [参数]”,

当您第一次执行这个命令时估计要惊呆下,这么多输出值怎么看的过来?其实把ps命令与管道符技术搭配使用,用于来抓取到某个指定服务进程所对应的PID号码,常见的ps命令参数包括有:

-a    显示所有的进程(包括其他用户的)    

-u    用户以及其他详细信息  

-x    显示没有控制终端的进程  

Linux系统中时刻运行着许许多多的进程,如果能够合理的管理它们,绝对有益于对系统的性能优化,Linux系统中进程最常见的5种不同的状态是运行、中断、不可中断、僵死与停止,它们的含义分别是:

R(运行):正在运行或在运行队列中等待。

S(中断):休眠中, 在等待某个条件的形成或接收到信号。

D(不可中断):收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。

Z:(僵死):进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。

T:(停止):进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行。

当执行"ps aux"命令后通常会看到下面格式的进程状态,表格中只是列举了部分输出值,而且正常的输出值中不包括中文注释部分:

top命令用于动态的监视进程活动与系统负载等信息,格式为:“top”。

top命令可真的是太厉害了,它能够动态的查看系统运维状态,完全可以比喻成是“强化版的linuxprobediancom/chapter-02.html#23任务管理器”。

top命令前面的五行为系统整体的统计信息:

第1行:系统时间,运行时间,登录终端数,系统负载(分别为1分钟、5分钟、15分钟的平均值,数值越小意味着负载越低)。

第2行:进程总数,运行中的,睡眠中的,停止的,僵死的。

第3行:用户占用资源,系统内核占用资源,改变过优先级的进程,空闲的资源,等待输入输出的时间。

此行数据均为CPU数据并以百分比格式显示,例如"99.2 id"意味着有99.2%的CPU处理器资源正在空闲中。

第4行:物理内存总量,使用量,空闲量,作为内核缓存的内存量。

第5行:虚拟内存总量,使用量,空闲量,已被提前加载的内存数据。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8701394.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存