Как правильно остановить сеанс экрана GNU и убедиться, что все запущенные процессы убиты?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно остановить сеанс экрана GNU и убедиться, что все запущенные процессы убиты?

Сообщение Anonymous »

Я использую экран GNU для запуска службы, но когда я остановлюсь с сеансом, процессы, работающие внутри него, не всегда прекращаются должным образом. Это приводит к тому, что порты остаются занятыми и предотвращают перезагрузку службы чистого запуска.

Код: Выделить всё

screen -dmS my_service -L -Logfile /tmp/my_service.log zsh -i
< /code>
Чтобы остановить сеанс, я в настоящее время делаю: < /p>
screen -S my_service -X stuff 'kill -TERM -$$\n'
screen -X -S my_service quit
Проблема:

Сессия экрана закрыт, но процессы внутри него (например, приложение Java Spring./Gradlew Bootrun ) продолжают работать. Процессы продолжения. Отказаться от сеанса: < /p>

Код: Выделить всё

import subprocess

def stop_screen_session(session_name: str):
"""Stop a screen session and ensure all processes inside are killed."""
try:
# Get the session's main PID
get_pid_cmd = f"screen -ls | grep {session_name} | awk '{{print $1}}' | cut -d'.' -f1"
result = subprocess.run(get_pid_cmd, shell=True, capture_output=True, text=True, check=False)
pid = result.stdout.strip()

if pid:
# Kill all processes in the session's process group
subprocess.run(f"pkill -TERM -g {pid}", shell=True, check=True)

# Check if any processes are still running and force kill if necessary
check_cmd = f"ps -eo pgid | grep {pid}"
result = subprocess.run(check_cmd, shell=True, capture_output=True, text=True, check=False)

if result.stdout.strip():
print(f"Processes still running under session {session_name}, forcing termination.")
subprocess.run(f"pkill -KILL -g {pid}", shell=True, check=True)

# Quit the screen session
subprocess.run(f"screen -X -S {session_name} quit", shell=True, check=True)

print(f"Screen session {session_name} stopped successfully.")

except subprocess.CalledProcessError as err:
print(f"Failed to stop session {session_name}: {err}")

stop_screen_session("my_service")
Это не работает должным образом ..


Подробнее здесь: https://stackoverflow.com/questions/794 ... sses-are-k
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»