在bash中如何检查进程是否运行
时间:2019-11-20 08:52:57 来源:igfitidea点击:
问题
在Linux上如何检查进程是否运行?
如何确定进程是否在Ubuntu服务器上运行?
解决方案
Linux和Unix中有各种命令可以用来检查进程。并通过检查结果来执行某些操作,比如重启进程或者发送告警邮件等。
使用Bash命令检查进程是否正在运行
使用Bash命令检查进程运行的过程:
- 使用pgrep 命令查看Linux上当前正在运行的进程,并在屏幕上列出进程ID(PID)。
- 使用pidof命令查找Linux或类Unix系统上正在运行的程序的进程ID
- 使用ps命令获取有关当前正在运行的Linux或Unix进程的信息,包括其进程标识号(PID)。
什么是Linux或Unix进程?
Linux进程是程序的执行(即运行)实例。
例如,Apache或Nginx Web服务器在Linux或类Unix系统上运行,在后台显示网页。
在后台运行的所有进程都称为守护进程。
因此,我们说nginx或httpd守护程序正在服务器上运行。
如何确认Nginx或HTTPD正在运行?
Nginx进程是否正在运行?
执行以下pgrep命令:
pgrep nginx pgrep httpd pgrep -x mysqld
如果该进程正在运行,可以看到输出;否则,没有输出。
使用pidof命令检查进程
语法为:
pidof program pidof httpd pidof mysqld pidof nginx
使用ps检查进程是否正在运行
语法是:
ps -C daemon ps -C nginx ps -C httpd
通常将grep命令或egrep命令与ps一起使用,如下所示:
ps aux | grep nginx ps aux | egrep -i "(nginx|httpd)"
在Shell脚本中,确定进程是否正在运行
在Linux或Unix 中,每个bash shell命令在正常或异常终止时都会返回一个状态。
在shell脚本中,可以使用这个命令退出状态来确定下一步的操作。
我们可以使用特殊shell变量$?
来获取先前执行的命令的退出状态。
例如:
pgrep -x mysqld echo $? pgrep -x nginx echo $? pidof httpd echo $? ps -C httpd echo $?
退出状态为0表示命令成功执行,没有任何错误。
非零(1-255值)的退出状态表示命令失败。
在Linux/Unix bash命令中检查进程是否正在运行
根据退出状态值来检查是否找到了该进程:
################### ## pgrep example ## ################### pgrep -x mysqld >/dev/null && echo "Process found" || echo "Process not found" pgrep -x httpd >/dev/null && echo "Process found" || echo "Process not found" ################### ## pidof example ## ################### pidof httpd >/dev/null && echo "Service is running" || echo "Service NOT running" pidof nginx >/dev/null && echo "Service is running" || echo "Service NOT running" ################ ## ps example ## ################ ps -C httpd >/dev/null && echo "Running" || echo "Not running" ps -C nginx >/dev/null && echo "Running" || echo "Not running"
在Bash Shell脚本中判断进程是否运行
Bash if..else..fi语句可以根据命令的执行状态进行下一步操作:
#!/bin/bash SERVICE="nginx" if pgrep -x "$SERVICE" >/dev/null then echo "$SERVICE is running" else echo "$SERVICE stopped" # systemctl start nginx fi
关于service和systemctl命令
在Linux下,可以使用systemctl命令来控制systemd系统。它也可以提供服务状态。
例如,检查nginx是正在运行,请运行:
systemctl status {service} systemctl status sshd systemctl status nginx
较早的Linux发行版和Unix之类的系统(例如FreeBSD),使用service命令。语法为:
sudo service {service} status sudo service nginx status sudo service sshd status
总结
我们学习了如何确定某个进程是否正在运行,以及在shell脚本中如何根据状态来启动/停止进程。
有关更多信息,请参见pgrep和bash手册页。