Make up a pipe so we don't try to `kill' (actually, arrange to continue)
our new process group before it's actually become a process group.
my (@args) = @_;
inform "starting client";
my (@args) = @_;
inform "starting client";
+ pipe my $r, my $w or sysfail "failed to create pipe: $!";
defined (my $kid = myfork) or sysfail "failed to fork: $!";
if (!$kid) {
hack_noip_env \%CLIENT_NOIP, "$SESSDIR/noip-client";
setpgid $$, $$ or sysfail "failed to set kid process group: $!";
defined (my $kid = myfork) or sysfail "failed to fork: $!";
if (!$kid) {
hack_noip_env \%CLIENT_NOIP, "$SESSDIR/noip-client";
setpgid $$, $$ or sysfail "failed to set kid process group: $!";
my $prog = $args[0];
exec @args or sysfail "failed to exec `$prog': $!";
}
my $prog = $args[0];
exec @args or sysfail "failed to exec `$prog': $!";
}
+ close $w;
+ defined sysread $r, my $buf, 1
+ or sysfail "failed to read pipe: $!";
+ close $r;
$CLIENTKID = $kid;
write_to_file "$SESSDIR/client.pid", "$kid\n";
maybe_foreground_client;
$CLIENTKID = $kid;
write_to_file "$SESSDIR/client.pid", "$kid\n";
maybe_foreground_client;