Package: nbd-client
Version: 1:2.9.9-1
Severity: minor
Tags: patch
Hi,
nbd-client doesn't detach itself fully from the terminal when it forks:
# lsof -p 3610
[...]
nbd-clien 3610 root 0u CHR 136,0 2 /dev/pts/0
nbd-clien 3610 root 1u CHR 136,0 2 /dev/pts/0
nbd-clien 3610 root 2u CHR 136,0 2 /dev/pts/0
[...]
The attached patch fixes that.
Cheers, Til
=== nbd-client.c
==================================================================
--- nbd-client.c (revision 5)
+++ nbd-client.c (local)
@@ -183,6 +183,8 @@
int sdp=0;
u64 size64;
u32 flags;
+ pid_t pid;
+ int i;
logging();
@@ -275,12 +277,30 @@
set_timeout(nbd, timeout);
finish_sock(sock, nbd, swap);
+#ifndef NOFORK
/* Go daemon */
-
- chdir("/");
-#ifndef NOFORK
- if (fork())
- exit(0);
+ umask(0);
+ if (chdir("/") < 0)
+ perror("Cannot change directory to /");
+ /* lose controlling terminal */
+ pid = fork();
+ if (pid < 0)
+ perror("Cannot fork");
+ else if (pid != 0)
+ exit(0); /* parent */
+ setsid();
+ /* make sure we never gain it again */
+ pid = fork();
+ if (pid < 0)
+ perror("Cannot fork");
+ else if (pid != 0)
+ exit(0); /* parent */
+ /* detach file descriptors */
+ for (i = 0; i < 3; i++)
+ close(i);
+ (void)open("/dev/null", O_RDWR);
+ (void)dup(0);
+ (void)dup(0);
#endif
do {