Hello Paul J Stevens wrote: > This is a long-standing issue. If anyone has any ideas I'd be happy to > hear them.
perldoc -q daemon : How do I fork a daemon process? If by daemon process you mean one that's detached (disassociated from its tty), then the following process is reported to work on most Unixish systems. o Open /dev/tty and use the TIOCNOTTY ioctl on it. See tty for details. Or better yet, you can just use the POSIX::setsid() function, so you don't have to worry about process groups. o Change directory to / o Reopen STDIN, STDOUT, and STDERR so they're not connected to the old tty. o Background yourself like this: fork && exit; And this is Proc::Daemon module (I think, this help you): sub Fork { my($pid); FORK: { if (defined($pid = fork)) { return $pid; } elsif ($! =~ /No more process/) { sleep 5; redo FORK; } else { croak "Can't fork: $!"; } } } sub OpenMax { my $openmax = POSIX::sysconf( &POSIX::_SC_OPEN_MAX ); (!defined($openmax) || $openmax < 0) ? 64 : $openmax; } sub Init { my $oldmode = shift || 0; my($pid, $sess_id, $i); ## Fork and exit parent if ($pid = Fork) { exit 0; } ## Detach ourselves from the terminal croak "Cannot detach from controlling terminal" unless $sess_id = POSIX::setsid(); ## Prevent possibility of acquiring a controling terminal if (!$oldmode) { $SIG{'HUP'} = 'IGNORE'; if ($pid = Fork) { exit 0; } } ## Change working directory chdir "/"; ## Clear file creation mask umask 0; ## Close open file descriptors # May be close only STDIN STDOUT STDERR foreach $i (0 .. OpenMax) { POSIX::close($i); } ## Reopen stderr, stdout, stdin to /dev/null open(STDIN, "+>/dev/null"); open(STDOUT, "+>&STDIN"); open(STDERR, "+>&STDIN"); $oldmode ? $sess_id : 0; } > Marc Dirix wrote: > > I've installed dbmail from svn over the debian rules script, > > > > The problem I think is, that one of the dbmail processes (lmtp or imap > > I use both) doesn't completely detach from the console. Because after > > starting dbmail from the init script I can't logout off the console > > anymore. -- Oleg Lapshin