mirror of
https://git.proxmox.com/git/pve-common
synced 2025-08-06 06:58:29 +00:00
fix #1819: fork_worker: ensure sync'ed workers control terminal
Use setpgid + tcsetpgrp instead of setsid if $sync (invocation via cli), thus keeping /dev/tty - ssh-copy-id/ssh need it to read the password, and putting the child in the forground. Further, ignore SIGTTOU in child process (otherwise it gets stopped upon tcsetpgrp) Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com> Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
f53ad23ac9
commit
e97f807c38
@ -494,10 +494,16 @@ sub fork_worker {
|
||||
$SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub { die "received interrupt\n"; };
|
||||
|
||||
$SIG{CHLD} = $SIG{PIPE} = 'DEFAULT';
|
||||
$SIG{TTOU} = 'IGNORE';
|
||||
|
||||
# set sess/process group - we want to be able to kill the
|
||||
# whole process group
|
||||
POSIX::setsid();
|
||||
if ($sync && -t STDIN) {
|
||||
POSIX::setpgid(0,0) or die "failed to setpgid: $!\n";;
|
||||
POSIX::tcsetpgrp(fileno(STDIN), $$) or die "failed to tcsetpgrp: $!\n";
|
||||
} else {
|
||||
POSIX::setsid();
|
||||
}
|
||||
|
||||
POSIX::close ($psync[0]);
|
||||
POSIX::close ($ctrlfd[0]) if $sync;
|
||||
|
Loading…
Reference in New Issue
Block a user