]> git.proxmox.com Git - pve-access-control.git/blobdiff - PVE/RPCEnvironment.pm
do not close STDIN if rune in foreground
[pve-access-control.git] / PVE / RPCEnvironment.pm
index 0905b65ef040930c6cc662ed96d4dc6936f99193..4cacd520f3c8261d1e28d068d110ad17f8ed7f00 100644 (file)
@@ -531,13 +531,17 @@ sub fork_worker {
            # same algorythm as used inside SA
            # STDIN = /dev/null
            my $fd = fileno (STDIN);
-           close STDIN;
-           POSIX::close(0) if $fd != 0;
 
-           die "unable to redirect STDIN - $!" 
-               if !open(STDIN, "</dev/null");
+           if (!$sync) {
+               close STDIN;
+               POSIX::close(0) if $fd != 0;
+
+               die "unable to redirect STDIN - $!" 
+                   if !open(STDIN, "</dev/null");
+
+               $outfh = PVE::Tools::upid_open($upid);
+           }
 
-           $outfh = PVE::Tools::upid_open($upid) if !$sync;
 
            # redirect STDOUT
            $fd = fileno(STDOUT);
@@ -652,10 +656,12 @@ sub fork_worker {
        my $int_count = 0;
        eval {
            local $SIG{INT} = local $SIG{QUIT} = local $SIG{TERM} = sub { 
+               # always send signal to all pgrp members
+               my $kpid = -$cpid;
                if ($int_count < 3) {
-                   kill(15, $cpid); # send TERM signal
+                   kill(15, $kpid); # send TERM signal
                } else {
-                   kill(9, $cpid); # send KILL signal
+                   kill(9, $kpid); # send KILL signal
                }
                $int_count++;
            };