Skip to content
  • Lennart Poettering's avatar
    shutdown: correctly wait for processes we killed in the killall spree · aaf7eb81
    Lennart Poettering authored
    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.
    aaf7eb81