【问题标题】:I see an incorrect pid我看到一个不正确的 pid
【发布时间】:2018-12-09 06:33:29
【问题描述】:

我的脚本有问题,当我想保存 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

【问题讨论】:

  • 您在shellcheck.net 检查您的代码了吗?祝你好运。
  • 看起来应该是 $! 而不是 $$! 反正

标签: linux command pid gnu-screen bin


【解决方案1】:

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

我在您的脚本中用“sleep 2000 &”替换了“screen -dmS ${BASENAME}”mono ${BINARYNAME} >/dev/null &”,并且正确的 $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

您的脚本可以从这里获取 sleeper 的 pid。

【讨论】:

    猜你喜欢
    • 2021-03-08
    • 1970-01-01
    • 2015-04-19
    • 2014-12-13
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多