Я вижу неправильный пид - PullRequest
0 голосов
/ 30 июня 2018

У меня проблема в моем скрипте, когда я хочу сохранить pid, тогда неверный pid сохраняется для меня. Я подозреваю, что сценарий pid (start.sh) написан мне вместо экранной команды.

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 голосов
/ 02 июля 2018

Я полагаю, вы ожидали получить pid процесса screen в $ PID. То, что происходит, - то, что экран немедленно выходит, и $! относится к pid процесса исчезнувшего экрана, а не к отдельному процессу, который выполняет вашу команду mono (если она все еще выполняется).

Я заменил "sleep 2000 &" на "screen -dmS $ {BASENAME}" mono $ {BINARYNAME}> / dev / null & "в вашем скрипте, и правильный $ 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

Отсюда ваш сценарий может захватить пижаму спящего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...