检查进程是否已经运行并退出的Shell脚本

6

我有一个带有方法 status()start() 的 shell 脚本。代码如下:

#function to check the jmeter processes running
status(){
     PID=$(ps -ef | grep jmeter|grep -v grep)
     echo "The jmeter processes running are: \n$PID"
}

#function to run the .jmx file given by the user at run time
start(){
     echo "Please enter the file name .jmx extension"
     read file
     echo "Please enter the log file name .jtl extension"
     read log_file
     sh /home/ubuntu/apache-jmeter-3.0/bin/jmeter.sh -n -t $file -l $log_file &
}
while [ "$1" != "" ]; do
case "$1" in
        start)
            jmeter_start
            ;;
         status)
            jmeter_status
            ;;
          *)
            echo $"Usage: $0 {start|status}"
            exit 1
        esac
   shift
done

现在当我运行这个脚本时,我需要检查它是否已经在运行,如果正在运行,我必须退出。请告诉我如何做到这一点。


这个检查是在哪里进行的?在start函数中吗? - RowlandB
"start" 不会在后台运行;它会在后台启动一个不同的进程,然后立即退出。 - chepner
1
@RowlandB 这就是我想要实现的,但是我做不到。 - user123
@chepner 是的。我正在运行jmeter命令以在后台执行.jmx文件。 - user123
2个回答

4
在函数开头添加一个标志并将其设置为1,在函数结束前将其设置为0,可以根据需要查询它。
#function to check the jmeter processes running
status(){
     PID=$(ps -ef | grep jmeter|grep -v grep)
     echo "The jmeter processes running are: \n$PID"
}

#function to run the .jmx file given by the user at run time
start(){
     export start_flag=1
     echo "Please enter the file name .jmx extension"
     read file
     echo "Please enter the log file name .jtl extension"
     read log_file
     sh /home/ubuntu/apache-jmeter-3.0/bin/jmeter.sh -n -t $file -l $log_file &
     export start_flag=0
}

另一种选择是将内容写入外部文件并进行查询。


我不明白这个。你能解释一下你所说的“查询它”的意思吗? - user123
请使用 $start_flag 或从您使用 cat 写入的文件中读取。 - Yaron

1
你已经拥有了大部分内容。你应该能够使用从status获取PID的代码,只需检查它是否存在即可。如果存在,则输出一些错误并退出。否则,执行你已经拥有的操作。
start(){
   PID=$(ps -ef | grep jmeter|grep -v grep)

   if [ -z $PID ]; then
       echo "Error: JMeter already running"
       exit
   fi

   echo "Please enter the file name .jmx extension"
   read file
   echo "Please enter the log file name .jtl extension"
   read log_file
   sh /home/ubuntu/apache-jmeter-3.0/bin/jmeter.sh -n -t $file -l $log_file &

}


但我想要检查特定的 start() 方法。我已经更新了问题,请检查。 - user123
两个“start”函数有什么不同之处?如果两个“start”的调用同时运行,也没有关系,只要你不会在后台运行两个“jmeter”实例即可。 - chepner
@chepner 是的,但我不想同时运行2个 start() - user123
@chepner 我已经编辑了问题,请检查并帮忙。 - user123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接