Linux下通过grep查找指定的进程是否存在

一、功能介绍

Linux通过命令查找指定的进程是否存在,并返回该进程的PID号。

在程序中可以使用该方法监控指定的程序是否在运行,如果异常退出,可以重新启动指定程序或者系统。

二、执行的命令

2.1 shell脚本代码

#查找指定进程的PID
find_name=s_app #s_app就是要查找的进程名称
pid_val=`ps -ef | grep $find_name | grep -v grep | awk '{print $2}'`
if [ $pid_val > 0 ]
then
	echo "查找的进程存在,对应的PID=${pid_val}"
else
	echo "查找的进程不存在"
fi

2.2 C语言代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

//查找指定的进程的PID号并返回
int find_pid(const char *app_name)
{
    char cmd_buff[100];
    int cnt;
    sprintf(cmd_buff,"ps -ef | grep %s | grep -v grep | awk '{print $2}'",app_name);
    FILE *fp=popen(cmd_buff,"r");
    if(fp==NULL)
    {
        return -1;
    }
    cnt=fread(cmd_buff,1,sizeof(cmd_buff)-1,fp);
    cmd_buff[cnt]='\0';
    pclose(fp);
    //判断是否读取到数据
    if(cnt==0)
    {
        return 0;
    }
    return atoi(cmd_buff);   
}

int main(int argc,char **argv)
{
    int pid;
    //填入要查找的应用程序名称
    pid=find_pid("s_app");
    if(pid==-1)
    {
        printf("查找错误,查找程序未能启动.\n");
    }
    else if(pid==0)
    {
        printf("查找的进程不存在.\n");
    }
    else
    {
        printf("查找的进程PID=%d\n",pid);
    }
    return 0;
}

三、检测指定程序是否存在,不存在就重新启动

#查找指定进程的PID
find_name=s_app
while :
do
	pid_val=`ps -ef | grep $find_name | grep -v grep | awk '{print $2}'`
	if [ ${pid_val} > 0 ]
	then
		echo "查找的进程存在"
	else
		echo "查找的进程不存在"
		#重新启动
		/mnt/hgfs/linux-share-dir/linux_c/s_app 8080 &
	fi
	sleep 10
done

为了方便启动该脚本,可以在执行程序里增加一行代码,将启动代码追加到系统启动文件里去:

grep -q "/home/wbyq/find_pid.sh &" /home/wbyq/.profile||echo "/home/wbyq/find_pid.sh &" >> /home/wbyq/.profile

猜你喜欢

转载自blog.csdn.net/xiaolong1126626497/article/details/108320441