From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] rework daemonizing logic in qemu-nbd
Date: Sun, 15 Jan 2012 11:42:36 +0100 [thread overview]
Message-ID: <jeuais$bsg$1@dough.gmane.org> (raw)
In-Reply-To: <20120114124210.E43483DE@gandalf.tls.msk.ru>
On 01/14/2012 01:39 PM, Michael Tokarev wrote:
> if (pid == 0) {
> - close(stderr_fd[0]);
> - ret = qemu_daemon(0, 0);
> -
> - /* Temporarily redirect stderr to the parent's pipe... */
> - dup2(stderr_fd[1], STDERR_FILENO);
> - if (ret == -1) {
> + int nullfd = open("/dev/null", O_RDWR);
> + if (nullfd< 0 || setsid()< 0) {
> err(EXIT_FAILURE, "Failed to daemonize");
> }
This is forking only once.
> -
> - /* ... close the descriptor we inherited and go on. */
> - close(stderr_fd[1]);
> - } else {
> - bool errors = false;
> - char *buf;
> -
> - /* In the parent. Print error messages from the child until
> - * it closes the pipe.
> + /* redirect stdin from /dev/null,
> + * stdout (temporarily) to the pipe to parent,
This is a bit of a hack.
> + /* now complete the daemonizing procedure.
> + */
> + if (device && !verbose) {
> + if (chdir("/") < 0) {
> + err(EXIT_FAILURE, "unable to chdir to /");
> + }
> + /* this redirects stderr to /dev/null */
> + dup2(STDIN_FILENO, STDERR_FILENO);
> + /* this redirects stdout to /dev/null too, and closes parent pipe */
> + dup2(STDIN_FILENO, STDOUT_FILENO);
> + }
> +
Half of this is already done in client_thread, and that would be the
place where you should add dup2(0, 1). Also, the chdir can be moved
earlier, after bdrv_open.
Paolo
next prev parent reply other threads:[~2012-01-15 10:42 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-14 12:39 [Qemu-devel] [PATCH] rework daemonizing logic in qemu-nbd Michael Tokarev
2012-01-15 10:42 ` Paolo Bonzini [this message]
2012-01-15 12:50 ` Michael Tokarev
2012-01-15 16:11 ` Paolo Bonzini
2012-01-15 16:44 ` Michael Tokarev
2012-01-15 17:31 ` Paolo Bonzini
2012-01-15 17:46 ` Paolo Bonzini
2012-01-16 7:22 ` Michael Tokarev
2012-01-16 7:41 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='jeuais$bsg$1@dough.gmane.org' \
--to=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).