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
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")