forked from josch/mmdebstrap
be more verbose when sending SIGHUP to the process group
This commit is contained in:
parent
1a62ccec46
commit
16c7276921
1 changed files with 23 additions and 1 deletions
24
mmdebstrap
24
mmdebstrap
|
@ -6265,8 +6265,30 @@ sub main() {
|
||||||
# running tar and this process itself) to reliably tear down
|
# running tar and this process itself) to reliably tear down
|
||||||
# all running child processes. The main process is not affected
|
# all running child processes. The main process is not affected
|
||||||
# because we are ignoring SIGHUP.
|
# because we are ignoring SIGHUP.
|
||||||
|
#
|
||||||
|
# FIXME: this codepath becomes dangerous in case mmdebstrap is not
|
||||||
|
# run in its own process group. When run from the terminal, the
|
||||||
|
# shell creates a new process group as part of its job control, so
|
||||||
|
# sending SIGHUP to all processes in our own process group should
|
||||||
|
# not be dangerous. But for example, on debci, lxc will run in the
|
||||||
|
# same process group as mmdebstrap and sending SIGHUP to the whole
|
||||||
|
# process group will also kill lxc. Creating a new process group
|
||||||
|
# for $pid will break things because only the foreground job is
|
||||||
|
# allowed to read from the terminal. If a background job does it,
|
||||||
|
# i will be suspended with SIGTTIN. Even though apt could be told
|
||||||
|
# to not read from the terminal by opening STDIN from /dev/null,
|
||||||
|
# this would make --chrooted-customize-hook=bash impossible.
|
||||||
|
# Making the $pid process group the foreground job will destroy all
|
||||||
|
# the signal handling we have set up for when the user presses
|
||||||
|
# ctrl+c in a terminal. Even if we fix the signal handling we now
|
||||||
|
# find ourselves in the opposite situation: the $pid process must
|
||||||
|
# now clean up the former main process tree reliably. And we cannot
|
||||||
|
# create a new process group for everything all-in-one because that
|
||||||
|
# would also destroy CTRL+C handling from the terminal.
|
||||||
warning "creating tarball failed: $@";
|
warning "creating tarball failed: $@";
|
||||||
kill HUP => -getpgrp();
|
my $pgroup = getpgrp();
|
||||||
|
warning "sending SIGHUP to all processes in process group $pgroup";
|
||||||
|
kill HUP => -$pgroup;
|
||||||
$exitstatus = 1;
|
$exitstatus = 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue