use POSIX 'setsid'; $SIG{HUP} = 'IGNORE'; #chdir('/') # Not required in your case; maybe not desired. # or die "Can't cd /: $!\n"; for( 1,0 ) { my $pid = fork(); die "Can't fork: $!\n" if ! defined $pid; exit if $pid; if( $_ && -1 == setsid() ) { die "Can't setsid: $!\n"; } } open STDIN, '<', '/dev/null' or die "STDIN: $!\n"; open STDOUT, '>', '/dev/null' or die "STDOUT: $!\n"; open STDERR, '>&', \*STDOUT or die "STDERR: $!\n";