by Anonymous » 08 Mar 2025, 14:50
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 ..
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]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
[/code]
[b] Das Problem: [/b]
Der Bildschirm ist geschlossen, aber die Prozesse darin (wie eine Java -Spring -App. Lingering -Prozesse. Beenden Sie die Sitzung: < /p>
[code]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")
[/code]
Dies funktioniert nicht richtig ..