Wie kann ich eine GNU -Bildschirmsitzung richtig stoppen und sicherstellen, dass alle laufenden Prozesse getötet werden?Python

Python-Programme
Anonymous
 Wie kann ich eine GNU -Bildschirmsitzung richtig stoppen und sicherstellen, dass alle laufenden Prozesse getötet werden?

Post by Anonymous »

Ich verwende GNU -Bildschirm , um einen Dienst auszuführen. Wenn ich die Sitzung beende, werden die darin ausgeführten Prozesse nicht immer ordnungsgemäß beendet. Dies führt dazu, dass die Ports besetzt sind und verhindert, dass der Dienst sauber neu gestartet wird.

Code: Select all

screen -dmS my_service -L -Logfile /tmp/my_service.log zsh -i
< /code>
Um die Sitzung zu stoppen, mache ich derzeit: < /p>
screen -S my_service -X stuff 'kill -TERM -$$\n'
screen -X -S my_service quit
Das Problem:

Der Bildschirm ist geschlossen, aber die Prozesse darin (wie eine Java -Spring -App. Lingering -Prozesse. Beenden Sie die Sitzung: < /p>

Code: Select all

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")
Dies funktioniert nicht richtig ..

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post