Bash检查进程是否在Linux/Unix上运行

时间:2020-01-09 10:37:19  来源:igfitidea点击:

我正在云中使用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