Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Avoid waiting for zombie processes in synctl stop (#11490)
Browse files Browse the repository at this point in the history
  • Loading branch information
squahtx authored Dec 2, 2021
1 parent 858d80b commit b50e39d
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
1 change: 1 addition & 0 deletions changelog.d/11490.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
`synctl stop` will now wait for Synapse to exit before returning.
19 changes: 16 additions & 3 deletions synctl
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,24 @@ NORMAL = "\x1b[m"
def pid_running(pid):
try:
os.kill(pid, 0)
return True
except OSError as err:
if err.errno == errno.EPERM:
return True
return False
pass # process exists
else:
return False

# When running in a container, orphan processes may not get reaped and their
# PIDs may remain valid. Try to work around the issue.
try:
with open(f"/proc/{pid}/status") as status_file:
if "zombie" in status_file.read():
return False
except Exception:
# This isn't Linux or `/proc/` is unavailable.
# Assume that the process is still running.
pass

return True


def write(message, colour=NORMAL, stream=sys.stdout):
Expand Down

0 comments on commit b50e39d

Please sign in to comment.