Browse Source

This was a lot more involved than I first suspected, but the solution was

simpler than I thought .. & backgrounds the process .. and then the pid
is watched for in /proc to dissappear.  So it is very mult-tasking.
master
freesource 23 years ago
parent
commit
6a6a26cda2
  1. 86
      BootRoot/BootRoot.pm

86
BootRoot/BootRoot.pm

@ -1507,25 +1507,37 @@ sub accept_button {
info(0, "Already bzip2 compressed.\n"); info(0, "Already bzip2 compressed.\n");
} }
else { else {
my $command_line =
"$compress -c9 $tmp/$entry_advanced[4]|";
info(0,"Compressing $entry_advanced[4] with $compress\n"); info(0,"Compressing $entry_advanced[4] with $compress\n");
open (PLACE, ">$tmp/$entry_advanced[4].gz"); system "$compress -c9 $tmp/$entry_advanced[4] > $tmp/$entry_advanced[4].gz&";
open (COMP,"$command_line");
while (<COMP>) {
print PLACE $_; $, = "";
while (Gtk->events_pending) my @ps_check = `ps w -C $compress 2> /dev/null`;
{ Gtk->main_iteration; } $, = "\n";
my @pids;
foreach my $line ( @ps_check ) {
if ( $line =~
m,$compress -c $tmp/$entry_advanced[4]$, ) {
my $pid = (split(" ",$line))[0];
push(@pids,$pid);
}
} }
close(COMP);
close(PLACE); foreach my $pid ( @pids ) {
do {
while (Gtk->events_pending)
{ Gtk->main_iteration; }
} while -d "/proc/$pid";
}
info(0,"Done compressing $entry_advanced[4] with $compress\n"); info(0,"Done compressing $entry_advanced[4] with $compress\n");
=pod $entry_advanced[4] = "$entry_advanced[4].gz";
system $entry3->set_text("$tmp/$entry_advanced[4]");
"$compress -c9 $tmp/$entry_advanced[4] > $tmp/$entry_advanced[4].gz";
=cut
$entry_advanced[4] = "$entry_advanced[4].gz";
$entry3->set_text("$tmp/$entry_advanced[4]");
} }
} }
@ -1554,26 +1566,36 @@ sub accept_button {
} }
else { else {
my $command_line =
"$compress -c $tmp/$entry_advanced[4]|";
info(0,"Compressing $entry_advanced[4] with $compress\n"); info(0,"Compressing $entry_advanced[4] with $compress\n");
open (PLACE, ">$tmp/$entry_advanced[4].bz2");
open (COMP,"$command_line");
while (<COMP>) { system"$compress -c $tmp/$entry_advanced[4] > $tmp/$entry_advanced[4].bz2&";
print PLACE $_;
while (Gtk->events_pending) $, = "";
{ Gtk->main_iteration; } my @ps_check = `ps w -C $compress 2> /dev/null`;
$, = "\n";
my @pids;
foreach my $line ( @ps_check ) {
if ( $line =~
m,$compress -c $tmp/$entry_advanced[4]$, ) {
my $pid = (split(" ",$line))[0];
push(@pids,$pid);
}
} }
close(COMP);
close(PLACE);
info(0,"Done compressing $entry_advanced[4] with $compress\n");
=pod foreach my $pid ( @pids ) {
system do {
"$compress -c $tmp/$entry_advanced[4] > $tmp/$entry_advanced[4].bz2"; while (Gtk->events_pending)
=cut { Gtk->main_iteration; }
} while -d "/proc/$pid";
}
info(0,"Done compressing $entry_advanced[4] with $compress\n");
$entry_advanced[4] = "$entry_advanced[4].bz2"; $entry_advanced[4] = "$entry_advanced[4].bz2";
$entry3->set_text("$tmp/$entry_advanced[4]"); $entry3->set_text("$tmp/$entry_advanced[4]");
} }
} }

Loading…
Cancel
Save