From 399cea5af494c91726d2f68c7f9e41ff27c48497 Mon Sep 17 00:00:00 2001 From: etienne Date: Thu, 1 Feb 2007 14:44:24 +0000 Subject: modif du process d'execution des agents pour faire fonctionner ivycontrolpenelt en etch --- FugueConfig.pm | 101 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 56 insertions(+), 45 deletions(-) (limited to 'FugueConfig.pm') diff --git a/FugueConfig.pm b/FugueConfig.pm index 23d05e5..dfda1b0 100644 --- a/FugueConfig.pm +++ b/FugueConfig.pm @@ -99,6 +99,18 @@ sub launchAgent { } # end launchAgent +sub execAgentBackground { + + my ($appname, $host, $command, $options, $bus) = @_; + $options .= " -b $bus" if $bus; + my $command_opt = $command; + $command_opt .= ' '.$options unless $options =~ /^\s*$/; + $command_opt = "$rsh -n $host '$command_opt'" + unless $host eq 'localhost' or $host eq hostname(); + system("($command_opt 2>&1)&"); + +} # end execAgentBackground + # launch a given command (not an ivy agent) on a given host sub launchCommand { @@ -114,51 +126,50 @@ sub launchCommand { sub _launch { - my ($label, $host, $command_opt, $type) = @_; - my $pid = fork; - warn ("[FugueConfig][WARNING] Could not fork $type \'$command_opt\'!\n"), return - unless defined $pid; - - # parent P1 - if ($pid) { - print "[FugueConfig][INFO] launch on $host $label $type \'$command_opt\' ". - "(pid=$pid)\n"; - return ($pid); - - # child P2 - } else { - - # overload parent trap - $SIG{INT} = 'DEFAULT'; - - # remote command - $command_opt = "$rsh -n $host '$command_opt'" - unless $host eq 'localhost' or $host eq hostname(); - - pipe(READER, WRITER); - WRITER->autoflush(1); - my $pid2 = fork; - warn ("[FugueConfig][WARNING] Could not fork $type \'$command_opt\'!\n"), - return - unless defined $pid2; - # parent P2 - if ($pid2) { - close READER; - CORE::open(STDOUT, ">&=WRITER") or - die "[FugueConfig][WARNING] Couldn't redirect STDOUT"; - exec "$command_opt 2>&1 " or - die "[FugueConfig][WARNING] Couldn't launch $command_opt"; - # child P3 - } else { - close WRITER; - while() { - chomp(); - print "$label $_\n"; - } - close READER; - exit; - } - } + my ($label, $host, $command_opt, $type) = @_; + my $pid = fork; + warn ("[FugueConfig][WARNING] Could not fork $type \'$command_opt\'!\n"), return + unless defined $pid; + + # parent P1 + if ($pid) { + print "[FugueConfig][INFO] launch on $host $label $type \'$command_opt\' ". + "(pid=$pid)\n"; + return ($pid); + + # child P2 + } else { + + # overload parent trap + $SIG{INT} = 'DEFAULT'; + + # remote command + $command_opt = "$rsh -n $host '$command_opt'" + unless $host eq 'localhost' or $host eq hostname(); + + pipe(READER, WRITER); + WRITER->autoflush(1); + my $pid2 = fork; + warn ("[FugueConfig][WARNING] Could not fork $type \'$command_opt\'!\n"), + return unless defined $pid2; + # parent P2 + if ($pid2) { + close READER; + CORE::open(STDOUT, ">&=WRITER") or + die "[FugueConfig][WARNING] Couldn't redirect STDOUT"; + exec "$command_opt 2>&1 " or + die "[FugueConfig][WARNING] Couldn't launch $command_opt"; + # child P3 + } else { + close WRITER; + while() { + chomp(); + print "$label $_\n"; + } + close READER; + exit; + } + } } # end _launch -- cgit v1.1