检查从同一bash脚本启动的后台进程的运行状态

帕萨萨拉西

我必须编写一个bash脚本,该脚本根据传递的命令行参数后台启动进程,返回它是否能够成功 运行 启动程序。

这是我想要实现的伪代码

if [ "$1" = "PROG_1" ] ; then
    ./launchProg1 &
    if [ isLaunchSuccess ] ; then
        echo "Success"
    else
        echo "failed"
        exit 1
    fi
elif [ "$1" = "PROG_2" ] ; then
    ./launchProg2 &
    if [ isLaunchSuccess ] ; then
        echo "Success"
    else
        echo "failed"
        exit 1
    fi
fi

脚本不能waitsleep不能被另一个关键任务c ++程序调用,并且需要很高的吞吐量(每秒不启动任何进程),而且进程的运行时间未知。脚本既不需要捕获任何输入/输出,也不需要等待启动过程的完成。

我尝试以下操作失败:

#Method 1
if [ "$1" = "KP1" ] ; then
    echo "The Arguement is KP1"
    ./kp 'this is text' &
    if [ $? = "0" ] ; then
        echo "Success"
    else
        echo "failed"
        exit 1
    fi
elif [ "$1" = "KP2" ] ; then
    echo "The Arguement is KP2"
    ./NoSuchCommand 'this is text' &
    if [ $? = "0" ] ; then
        echo "Success"
    else
        echo "failed"
        exit 1
    fi
#Method 2
elif [ "$1" = "CD5" ] ; then
    echo "The Arguement is CD5"
    cd "doesNotExist" &
    PROC_ID=$!
    echo "PID is $PROC_ID"
    if kill -0 "$PROC_ID" ; then
        echo "Success"
    else
        echo "failed"
        exit 1
    fi
#Method 3
elif [ "$1" = "CD6" ] ; then
    echo "The Arguement is CD6"
    cd .. &
    PROC_ID=$!
    echo "PID is $PROC_ID"
    ps -eo pid | grep "$PROC_ID" && { echo "Success"; exit 0; }
    ps -eo pid | grep  "$PROC_ID" || { echo "failed" ; exit 1; }
else
    echo "Unknown Argument"
    exit 1
fi

运行脚本会产生不可靠的输出。方法1和2总是返回,Success而方法3failed在检查之前进程执行完成时返回

这是在GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)测试的示例GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

[scripts]$ ./processStarted3.sh KP1
The Arguement is KP1
Success
[scripts]$ ./processStarted3.sh KP2
The Arguement is KP2
Success
./processStarted3.sh: line 13: ./NoSuchCommand: No such file or directory
[scripts]$ ./processStarted3.sh CD6
The Arguement is CD6
PID is 25050
failed

正如在类似问题中所建议的那样,我不能使用进程名称,因为一个进程可能会执行多次,其他进程则无法应用。

我还没有尝试过screentmux,因为获得在生产服务器上安装它们的许可并不容易(但是如果剩下的唯一选择就是这样做)

UPDATE
@ghoti
./kp是存在的程序,启动该程序将返回Success./NoSuchCommand不存在。仍然可以从(编辑)输出中看到,脚本错误地返回Success

进程完成执行或程序异常终止无关紧要不会以任何方式跟踪通过脚本启动的程序(因此,我们不存储pid在任何表中,也没有必要使用deamontools)。

@Etan赖斯纳
一个程序,它未能的实施例发射将是./NoSuchCommand,它不存在。或者也许是一个损坏的程序无法启动。

@Vorsprung
调用在后台启动程序的脚本不会花费很多时间(并且可以根据我们的期望进行管理)。但是sleep 1随着时间的推移会累积导致问题。

上述#Method3工作的精细限制过程ps -eo pid | grep "$PROC_ID" && { echo "Success"; exit 0; }可以在执行检查之前终止

拉延潘迪特

这是一个示例,该示例将显示过程的结果,无论该过程是否成功启动。

#!/bin/bash
$1 & #executes a program in background which is provided as an argument
pid=$! #stores executed process id in pid
count=$(ps -A| grep $pid |wc -l) #check whether process is still running
if [[ $count -eq 0 ]] #if process is already terminated, then there can be two cases, the process executed and stop successfully or it is terminated abnormally
then
        if wait $pid; then #checks if process executed successfully or not
                echo "success"
        else                    #process terminated abnormally
                echo "failed (returned $?)"
        fi
else
        echo "success"  #process is still running
fi

#Note: The above script will only provide a result whether process started successfully or not. If porcess starts successfully and later it terminates abnormally then this sciptwill not provide a correct result

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash 脚本运行一个分离的循环,顺序启动后台进程

来自分类Dev

Bash脚本启动“孤立”后台进程

来自分类Dev

如何检查启动后台进程的bash脚本的执行时间

来自分类Dev

如何从PHP / bash脚本启动/结束后台进程?

来自分类Dev

在bash脚本中检查并杀死挂起的后台进程

来自分类Dev

如何编写crontab脚本,该脚本将检查进程的状态并在未运行时启动它?

来自分类Dev

检查ZooKeeper的运行状态

来自分类Dev

气流启动脚本在启动/运行状态后立即进入停止/等待状态

来自分类Dev

我需要编写一个bash脚本来检查服务状态并重新启动

来自分类Dev

备用bash脚本,用于检查进程是否正在运行

来自分类Dev

Bash脚本检查特定的php进程是否正在运行?

来自分类Dev

启动后台进程并检查它何时结束

来自分类Dev

Bash脚本启动一个分离的tmux会话,运行一个脚本,并使tmux会话保持活动状态

来自分类Dev

在后台启动脚本时,我会运行两个进程

来自分类Dev

在后台启动脚本时,我会运行两个进程

来自分类Dev

后台进程崩溃时运行脚本

来自分类Dev

使用后台进程运行 ssh 脚本

来自分类Dev

从bash脚本启动进程失败

来自分类Dev

如何使用Ctrl + C杀死在Bash脚本中启动的所有后台进程?

来自分类Dev

BASH:将多个bash后台进程写入同一文件是否安全?

来自分类Dev

具有后台进程的bash脚本

来自分类Dev

从bash脚本强制进程进入后台

来自分类Dev

python:子进程调用一个脚本,该脚本运行一个挂起的后台进程

来自分类Dev

Bash脚本-运行进程并发送到后台(如果良好),否则

来自分类Dev

PHP在运行后台进程的bash脚本上调用shell_exec超时

来自分类Dev

从python脚本启动新进程,然后从同一脚本中将其杀死

来自分类Dev

Python,在后台运行一个进程,并从主线程获取状态

来自分类Dev

Python,在后台运行一个进程,并从主线程获取状态

来自分类Dev

如何检查正在运行的进程是否为后台进程?

Related 相关文章

  1. 1

    Bash 脚本运行一个分离的循环,顺序启动后台进程

  2. 2

    Bash脚本启动“孤立”后台进程

  3. 3

    如何检查启动后台进程的bash脚本的执行时间

  4. 4

    如何从PHP / bash脚本启动/结束后台进程?

  5. 5

    在bash脚本中检查并杀死挂起的后台进程

  6. 6

    如何编写crontab脚本,该脚本将检查进程的状态并在未运行时启动它?

  7. 7

    检查ZooKeeper的运行状态

  8. 8

    气流启动脚本在启动/运行状态后立即进入停止/等待状态

  9. 9

    我需要编写一个bash脚本来检查服务状态并重新启动

  10. 10

    备用bash脚本,用于检查进程是否正在运行

  11. 11

    Bash脚本检查特定的php进程是否正在运行?

  12. 12

    启动后台进程并检查它何时结束

  13. 13

    Bash脚本启动一个分离的tmux会话,运行一个脚本,并使tmux会话保持活动状态

  14. 14

    在后台启动脚本时,我会运行两个进程

  15. 15

    在后台启动脚本时,我会运行两个进程

  16. 16

    后台进程崩溃时运行脚本

  17. 17

    使用后台进程运行 ssh 脚本

  18. 18

    从bash脚本启动进程失败

  19. 19

    如何使用Ctrl + C杀死在Bash脚本中启动的所有后台进程?

  20. 20

    BASH:将多个bash后台进程写入同一文件是否安全?

  21. 21

    具有后台进程的bash脚本

  22. 22

    从bash脚本强制进程进入后台

  23. 23

    python:子进程调用一个脚本,该脚本运行一个挂起的后台进程

  24. 24

    Bash脚本-运行进程并发送到后台(如果良好),否则

  25. 25

    PHP在运行后台进程的bash脚本上调用shell_exec超时

  26. 26

    从python脚本启动新进程,然后从同一脚本中将其杀死

  27. 27

    Python,在后台运行一个进程,并从主线程获取状态

  28. 28

    Python,在后台运行一个进程,并从主线程获取状态

  29. 29

    如何检查正在运行的进程是否为后台进程?

热门标签

归档