gpt4 book ai didi

Bash需要检查是否存在多个pid

转载 作者:行者123 更新时间:2023-12-04 19:43:46 24 4
gpt4 key购买 nike

我正在构建的脚本需要检查是否有更多进程(pid)正在运行同一进程。如果进程两次运行,我们需要终止该进程。

这是一个示例,由于某种原因,此过程将运行两次。所以我们需要监控这个并且需要杀死/重启单声道进程。

#!/bin/sh
export PATH=/bin:/sbin:/usr/bin:/usr/sbin

set -x # set debug
PID="/usr/local/bin/Serverd.pid"
Service="/etc/init.d/serverd" $1

#
# Functions
#
die (){
printf '%s\n' "$*" >&2
exit 1
}

log(){
logger -t HealthCheck -i $*
}

process () {
[[ $(pidof mono /dev/null 2>&1) == '' ]] && echo 0 || echo 1
}

pid () {
[[ ! -r $PID ]] && echo 0 || echo 1
}

for i in $(process); do
if [[ $i -eq '0' ]]
then
echo 'Process is Stoped!!!!!'
if [[ $(pid) -eq '1' ]]
then
echo PID still there, remove PID first
rm -rf $PID
$Service start
exit 1
else
$Service start
exit 1
fi
else
echo 'Process is Running!!!!'
exit 1
fi
done

如果我有同一个单声道进程的 2 个 PID,则需要将其杀死
+++ pidof mono /dev/null
++ [[ 30454 30014 == '' ]]

我是怎么做到的?

最佳答案

如果我理解正确,您的问题是 pidof返回多个 pid 的列表,并且您希望将它们全部杀死。

如果是这种情况,您可以这样做:

pids=($(pidof mono))
for pid in ${pids[@]:1}; do
kill -9 $pid
done

这个:
  • 将 pid 放入数组
  • 获取不包含第一个元素的子数组
  • 杀死该子数组中的每个项目。
  • 关于Bash需要检查是否存在多个pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42706317/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com