summaryrefslogtreecommitdiff
path: root/src/systemctl/systemctl.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-04-01 22:48:40 +0200
committerLennart Poettering <lennart@poettering.net>2013-04-02 01:28:01 +0200
commitaaf7eb81be912e7bed939f31e3bc4c631b2552b3 (patch)
tree92f52fdb3635e99d1449d4e79c96872066668d38 /src/systemctl/systemctl.c
parentceca950145f35f06938acba62af0c678f896e87d (diff)
shutdown: correctly wait for processes we killed in the killall spree
Previously we simply counted how many processes we killed and expected as many waitpid() calls to succeed. That however is incorrect to do. As we might kill processes that are not our immediate children, and as there might be left-over processes in the waitpid() queue from earlier the we might get more ore less waitpid() events that we expect. Hence: keep precise track of the processes we kill, remove the ones we get waitpid() for, and after each time we get SIGCHLD check if all others still exist. We use getpgid() to check if a PID still exists. This should fix issues with journald not setting journal files offline correctly on shutdown, because we'd too quickly proceed from SIGTERM to SIGKILL because some left-over process was in our waitpid() queue.
Diffstat (limited to 'src/systemctl/systemctl.c')
0 files changed, 0 insertions, 0 deletions