What's the cleanest way to wait on s6-svscan to shut down after issuing of a SIGTERM (say s6 via-svscanctl -t)?
Be its parent, and wait for it. :) On SIGTERM, s6-svscan will not exit until the supervision tree is entirely down, so that will work. If you're not the parent, then you'll have to wait for a notification somehow, but that's easy: When s6-svscan wants to exit, it doesn't exit right away, but tries to exec into the .s6-svscan/finish script. So you have a clear indicator here: when .s6-svscan/finish runs, it means the supervision tree is down. So, for instance, make a finish script that writes a byte in a fifo, and have your jail shutdown script read on that fifo. Something like: .s6-svscan/finish: #!/bin/sh exec echo > /run/blah/fifo shutdown script: #!/bin/sh ... rm -f /run/blah/fifo mkfifo /run/blah/fifo read < /run/blah/fifo & s6-svscanctl -t /run/service wait ... (read on the fifo before running s6-svscanctl, to avoid the small race condition.)
Looking at the documentation, my only option appears to be to check if the return code of s6-svscanctl is 100, or maybe to monitor for the existence of .s6-svscan/control (not sure if it's removed on exit). Are there any other ways to monitor s6-svscan?
Ew. Don't poll. Use .s6-svscan/finish to do anything you want to do at s6-svscan death time. -- Laurent