查看由用户Y启动的带有PID X的进程是否正在运行

时间:2018-07-26 06:47:42

标签: bash grep pid ps

我正在研究一个批处理启动器脚本,目的是:

  • 检查是否要使用有效参数启动我们要呼叫的批次
  • 检查该用户是否已在运行批处理

我对参数很好,但是我无法实现“已经运行”的东西。这是我的工作:

# Check whether the batch is running.
# The check is pretty simple: open a running pid file and check that the process
# is alive and launched by the given username.
# $1 : Path to the PID file to check
# $2 : Username to check
# return :  0 if batch is running
#           1 if batch is not running
isrunning() {
  # Check for running app
  if [ -f "$1" ]; then
    proc=$(cat $1);
    if ps --pid=$proc -o uname=,pid=,time= | grep $2
    then
      return 0
    fi
  fi
  return 1
}

猫没事,我在文件中得到了值(批处理PID)。但是这行

if ps --pid=$proc -o uname=,pid=,time= | grep $2

我正在努力。在我看来,如果应用于ps命令的grep返回某项,则我返回0,因此该脚本将认为进程正在运行,因此会以适当的返回码在更高级别退出。

哪里出错了?


编辑

好吧,问题不在于这部分代码,而是与超时命令结合使用。

我想执行两次程序,以查看我的第二次执行是否返回错误代码,并显示“批处理已在运行”错误,但是我将超时值设置得过低,因此返回了超时代码我等待的代码。很抱歉给您带来不便,也感谢您为我提供的帮助

0 个答案:

没有答案