Skip to content
  • Hanna Reitz's avatar
    2525edd8
    qsd: Add --daemonize · 2525edd8
    Hanna Reitz authored
    
    
    To implement this, we reuse the existing daemonizing functions from the
    system emulator, which mainly do the following:
    - Fork off a child process, and set up a pipe between parent and child
    - The parent process waits until the child sends a status byte over the
      pipe (0 means that the child was set up successfully; anything else
      (including errors or EOF) means that the child was not set up
      successfully), and then exits with an appropriate exit status
    - The child process enters a new session (forking off again), changes
      the umask, and will ignore terminal signals from then on
    - Once set-up is complete, the child will chdir to /, redirect all
      standard I/O streams to /dev/null, and tell the parent that set-up has
      been completed successfully
    
    In contrast to qemu-nbd's --fork implementation, during the set up
    phase, error messages are not piped through the parent process.
    qemu-nbd mainly does this to detect errors, though (while os_daemonize()
    has the child explicitly signal success after set up); because we do not
    redirect stderr after forking, error messages continue to appear on
    whatever the parent's stderr was (until set up is complete).
    
    Signed-off-by: default avatarHanna Reitz <hreitz@redhat.com>
    Message-Id: <20220303164814.284974-4-hreitz@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    2525edd8
    qsd: Add --daemonize
    Hanna Reitz authored
    
    
    To implement this, we reuse the existing daemonizing functions from the
    system emulator, which mainly do the following:
    - Fork off a child process, and set up a pipe between parent and child
    - The parent process waits until the child sends a status byte over the
      pipe (0 means that the child was set up successfully; anything else
      (including errors or EOF) means that the child was not set up
      successfully), and then exits with an appropriate exit status
    - The child process enters a new session (forking off again), changes
      the umask, and will ignore terminal signals from then on
    - Once set-up is complete, the child will chdir to /, redirect all
      standard I/O streams to /dev/null, and tell the parent that set-up has
      been completed successfully
    
    In contrast to qemu-nbd's --fork implementation, during the set up
    phase, error messages are not piped through the parent process.
    qemu-nbd mainly does this to detect errors, though (while os_daemonize()
    has the child explicitly signal success after set up); because we do not
    redirect stderr after forking, error messages continue to appear on
    whatever the parent's stderr was (until set up is complete).
    
    Signed-off-by: default avatarHanna Reitz <hreitz@redhat.com>
    Message-Id: <20220303164814.284974-4-hreitz@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Loading