Bash检查进程是否在Linux/Unix上运行
我正在云中使用CentOS 7 Linux和Ubuntu 18.04 LTS服务器。
如何检查进程是否在Linux上运行?
如何确定进程是否在Ubuntu服务器上运行的Shell脚本中运行?
说明:您可以使用bash shell和shell脚本快速确定进程是否正在运行。
有各种Linux和Unix命令行实用程序来检查程序是否正在使用bash shell运行。
可以将shell脚本粘合在一起,并有条件地使用bash shell来执行某些操作,例如重新启动进程或通过电子邮件警报通知sysadmin。
Bash检查进程是否正在运行
Bash命令检查运行过程:
- pgrep command浏览Linux上当前正在运行的bash进程,并在屏幕上列出进程ID(PID)。
- pidof命令查找Linux或类Unix系统上正在运行的程序的进程ID
- ps命令获取有关当前正在运行的Linux或Unix进程的信息,包括其进程标识号(PID)。
让我们看一些有关检查在Linux和Unix系统中是否正在运行的进程的示例。
什么是Linux或Unix进程?
Linux进程不过是程序的执行(即运行)实例。
例如,Apache或Nginx Web服务器在Linux或类Unix系统上运行,以在后台显示网页。
在后台运行的所有进程都称为守护程序。
因此,Apache/Nginx是一类在后台连续运行的进程,我们说nginx或httpd守护程序正在服务器上运行。
但是,如何验证Nginx或HTTPD正在运行?
您需要使用命令。
Nginx进程是否正在运行?
键入以下pgrep命令:
pgrep nginx pgrep httpd pgrep -x mysqld
如果该进程正在运行,您将在屏幕上看到输出;否则,事实并非如此。
使用pidof命令运行的Bash检查进程
语法为:
pidof program pidof httpd pidof mysqld pidof nginx
Bash Shell使用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变量来获取先前执行的命令的退出状态。
打印 ?
变量使用echo命令:
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" # uncomment to start nginx if stopped # systemctl start nginx # mail 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