qemu-nbd: Add --pid-file option

--fork is a bit boring if there is no way to get the child's PID.  This
option helps.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-Id: <20190508211820.17851-2-mreitz@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Max Reitz 2019-05-08 23:18:16 +02:00 committed by Eric Blake
parent 785a602eae
commit 637bc5a5d8
2 changed files with 13 additions and 0 deletions

View File

@ -61,6 +61,7 @@
#define QEMU_NBD_OPT_IMAGE_OPTS 262 #define QEMU_NBD_OPT_IMAGE_OPTS 262
#define QEMU_NBD_OPT_FORK 263 #define QEMU_NBD_OPT_FORK 263
#define QEMU_NBD_OPT_TLSAUTHZ 264 #define QEMU_NBD_OPT_TLSAUTHZ 264
#define QEMU_NBD_OPT_PID_FILE 265
#define MBR_SIZE 512 #define MBR_SIZE 512
@ -113,6 +114,7 @@ static void usage(const char *name)
" specify tracing options\n" " specify tracing options\n"
" --fork fork off the server process and exit the parent\n" " --fork fork off the server process and exit the parent\n"
" once the server is running\n" " once the server is running\n"
" --pid-file=PATH store the server's process ID in the given file\n"
#if HAVE_NBD_DEVICE #if HAVE_NBD_DEVICE
"\n" "\n"
"Kernel NBD client support:\n" "Kernel NBD client support:\n"
@ -641,6 +643,7 @@ int main(int argc, char **argv)
{ "image-opts", no_argument, NULL, QEMU_NBD_OPT_IMAGE_OPTS }, { "image-opts", no_argument, NULL, QEMU_NBD_OPT_IMAGE_OPTS },
{ "trace", required_argument, NULL, 'T' }, { "trace", required_argument, NULL, 'T' },
{ "fork", no_argument, NULL, QEMU_NBD_OPT_FORK }, { "fork", no_argument, NULL, QEMU_NBD_OPT_FORK },
{ "pid-file", required_argument, NULL, QEMU_NBD_OPT_PID_FILE },
{ NULL, 0, NULL, 0 } { NULL, 0, NULL, 0 }
}; };
int ch; int ch;
@ -667,6 +670,7 @@ int main(int argc, char **argv)
bool list = false; bool list = false;
int old_stderr = -1; int old_stderr = -1;
unsigned socket_activation; unsigned socket_activation;
const char *pid_file_name = NULL;
/* The client thread uses SIGTERM to interrupt the server. A signal /* The client thread uses SIGTERM to interrupt the server. A signal
* handler ensures that "qemu-nbd -v -c" exits with a nice status code. * handler ensures that "qemu-nbd -v -c" exits with a nice status code.
@ -866,6 +870,9 @@ int main(int argc, char **argv)
case 'L': case 'L':
list = true; list = true;
break; break;
case QEMU_NBD_OPT_PID_FILE:
pid_file_name = optarg;
break;
} }
} }
@ -1186,6 +1193,10 @@ int main(int argc, char **argv)
nbd_update_server_watch(); nbd_update_server_watch();
if (pid_file_name) {
qemu_write_pidfile(pid_file_name, &error_fatal);
}
/* now when the initialization is (almost) complete, chdir("/") /* now when the initialization is (almost) complete, chdir("/")
* to free any busy filesystems */ * to free any busy filesystems */
if (chdir("/") < 0) { if (chdir("/") < 0) {

View File

@ -117,6 +117,8 @@ option; or provide the credentials needed for connecting as a client
in list mode. in list mode.
@item --fork @item --fork
Fork off the server process and exit the parent once the server is running. Fork off the server process and exit the parent once the server is running.
@item --pid-file=PATH
Store the server's process ID in the given file.
@item --tls-authz=ID @item --tls-authz=ID
Specify the ID of a qauthz object previously created with the Specify the ID of a qauthz object previously created with the
--object option. This will be used to authorize connecting users --object option. This will be used to authorize connecting users