gpt4 book ai didi

linux - 我看到一个不正确的 pid

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:23 26 4
gpt4 key购买 nike

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

最佳答案

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

我在您的脚本中用“sleep 2000 &”替换了“screen -dmS ${BASENAME}”mono ${BINARYNAME} >/dev/null &”,并且正确的 $PID( sleep 过程的 $PID)保存在变量并采取行动。由于我上面描述的原因, screen 不会发生这种情况。

您可能需要考虑处理“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

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

关于linux - 我看到一个不正确的 pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51112314/

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