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 {