我看到不正确的pid

时间:2018-06-30 06:23:21

标签: linux command pid gnu-screen bin

我的脚本有问题,当我想保存pid时,不正确的pid被保存给我。 我怀疑pid脚本(start.sh)是写给我的,而不是screen命令写的。

echo "Trwa uruchamianie bota muzycznego..."
    if [ -e "$BINARYNAME" ]; then
        if [ ! -x "$BINARYNAME" ]; then
            echo "${BINARYNAME} is not executable, trying to set it"
            chmod u+x "${BINARYNAME}"
        fi
        if [ -x "$BINARYNAME" ]; then
            export LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}"                  
            screen -dmS "${BASENAME}" mono "${BINARYNAME}" > /dev/null &
            TEST=$0
            PID=$!
            echo "${PID}"
            ps -p ${PID} > /dev/null 2>&1
            if [ "$?" -ne "0" ]; then
                echo "Bot muzyczy nie został uruchomiony."
            else
                echo $PID > TS3AudioBot.pid
                echo "Bot muzyczny został uruchomiony."
            fi
        else
            echo "${BINARNAME} nie jest możliwy do wykrycia, nie można uruchomić bota muzycznego."
        fi
    else
        echo "Could not find binary, aborting"
        exit 5
    fi

1 个答案:

答案 0 :(得分:0)

我相信您期望在$ PID中获得 screen 进程的pid。发生的情况是屏幕立即退出,并且$!是指消失的屏幕进程的pid,而不是运行 mono 命令(如果仍在运行)的分离进程的pid。

我在脚本中将“ screen -dmS $ {BASENAME}”单声道$ {BINARYNAME}> / dev / null&”替换为“ sleep 2000&”,并在其中保存了正确的$ PID,即睡眠过程的$ PID。变量并对其进行操作。由于上述原因,屏幕上不会发生这种情况。

您可能要考虑处理“ screen -list”的输出,以便获得分离过程的pid:

root@tutorial:/var/tmp# screen -dmS 'sleeper' sleep 2000
root@tutorial:/var/tmp# screen -list
There is a screen on:
    7089.sleeper    (07/02/2018 04:05:57 AM)    (Detached)
1 Socket in /var/run/screen/S-root.

root@tutorial:/var/tmp# ps axlww | grep 7089
5     0  7089     1  20   0  25672  2396 poll_s Ss   ?          0:00 SCREEN -dmS sleeper sleep 2000
4     0  7090  7089  20   0   5808   648 hrtime Ss+  pts/0      0:00 sleep 2000
0     0  7093  2607  20   0  12728  2192 pipe_w S+   ttyS1      0:00 grep 7089

您的脚本可以从此处获取轨枕的pid。