如何检查进程是否已经在bash(shell脚本)Linux中运行
时间:2020-01-09 10:37:38 来源:igfitidea点击:
现在如何检查bash Linux中是否已经在运行进程?如何确定同一脚本或者进程的多个实例是否在后台运行?如果在Linux中使用bash在shell脚本中的另一个会话上已经运行了相同脚本的重复实例,该如何退出脚本?
有多种方法可以确定重复实例并检查进程是否已在运行。我将分享一些我在Shell脚本中常用的方法。
检查进程是否已在运行-方法1
最简单直接的方法是使用pidof
。在脚本启动时使用以下功能,可以确保一次只运行一个脚本实例。
#!/bin/bash script_name=$(basename -- "#!/bin/bash script_name=$(basename -- "") if pidof -x "$script_name" -o $$>/dev/null;then echo "An another instance of this script is already running, please clear all the sessions of this script before starting a new session" exit 1 fiscript_name=$(basename -- "##代码##") pid=(`pgrep -f $script_name`) pid_count=${#pid[@]} [[ -z $pid ]] && echo "Failed to get the PID" if [ -f "/var/run/$script_name" ];then if [[ $pid_count -gt "1" ]];then echo "An another instance of this script is already running, please clear all the sessions of this script before starting a new session" exit 1 else echo "Looks like the last instance of this script exited unsuccessfully, perform cleanup" rm -f "/var/run/$script_name" fi fi echo $pid > /var/run/$script_name # Main Function rm -f "/var/run/$script_name"") pid=(`pgrep -f $script_name`) [[ -z $pid ]] && echo "Failed to get the PID" && exit 1 if [ -f "/var/run/$script_name" ];then echo "An another instance of this script is already running, please clear all the sessions of this script before starting a new session" exit 1 fi echo $pid > /var/run/$script_name # Main Function rm -f "/var/run/$script_name"
检查进程是否已经在运行-方法2
随着每个系统守护进程的启动,在/var/run
下创建一个PID
文件。因此,我们可以使用类似的方法来跟踪脚本中任何已经运行的实例的PID状态。例如,如果该脚本由于某种原因突然退出,然后再从/var/run中删除PID文件,则此方法不是很可靠。即使在没有脚本实例处于运行状态的情况下,脚本仍然会抛出错误并退出。
但是通过添加一个陷阱并为任何突然退出执行清除操作仍然可以使用。
##代码##检查进程是否已经在运行-方法3
此方法使用方法2中的功能,但功能更强大。其中:我们将添加更多检查以确保即使脚本突然退出,该函数也将执行所需的清除。
##代码##