Linux下通过grep查找指定的进程是否存在
【摘要】
一、功能介绍
Linux通过命令查找指定的进程是否存在,并返回该进程的PID号。
在程序中可以使用该方法监控指定的程序是否在运行,如果异常退出,可以重新启动指定程序或者系统。
二、执行的命令
2.1 shell脚本代码
#查找指定进程的PIDfind_name=s_app #s_app就是要查找的进程名称pid_val=`ps...
一、功能介绍
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
文章来源: xiaolong.blog.csdn.net,作者:DS小龙哥,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaolong.blog.csdn.net/article/details/108320441
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)