Hallo,
ich habe mich jetzt für die grep ps Variante entschieden,
aber das Testen der Zeit habe ich an die dabei modifzierte
Output-Datei gekoppelt.
Dabei tritt hängt das Programm sich in der letzten Schleife auf,
was mir aber nicht einleuchtet, denn den Prozess killt er schon
(sieht zumindest so aus!, vllt kenn ich die shell aber auch zu schlecht),
wie kommt der Interpreter also zu der letzten Zeile, aber bleibt trotzdem in
der while-Schleife hängen...
Hier ist der Code:
Code:
1 #! /usr/bin/perl -w
2 use strict;
3
4 #Test of Argument Invocation
5 warn "Alle weiteren Argumente außer dem ersten werden vernachlässigt!\n" if(@ARGV!=1);
6 defined ($ARGV[0]) or die "Falsche Eingabe: Keine Argumente!\n";
7
8 #Global Vars
9 my ($mt1, $mt2)=(0,0);
10 my $timeMin=10;
11 my $psCrystal;
12 (my $output_name=$ARGV[0]) =~ s/\.d12\b/.op/;
13 my $PID=undef;
14
15 #Call Process "crystal"
16 system "crystal < $ARGV[0] > $output_name &";
17 $mt1=(stat $output_name)[9] until ($mt1);#Starttime-Marker
18 print "\$mt1 = $mt1\n";
19
20 #grep PID: Crystal-Process
21 open (LIST, "ps -e|grep 'crystal'|") or die "Fehler beim Ausführen von \"ps -e\": $!!";
22 while (<LIST>){
23 m/\s+\d+:\d{2}:(\d{2})\s+/;
24 if ($1 < $timeMin){
25 $timeMin=$1;
26 $psCrystal=$_;
27 }
28 }
29 $psCrystal=~ m/^\s*(\d{1,5})\s./;
30 $PID=$1;
31 print "PID = $PID\n";
32
33 #kill Process after 5secs
34 while(($mt2-$mt1) < 10){ # Hier bleibt er hängen und $mt2 wird ständig ausgegeben
35 print "\$mt2 = $mt2\n";
36 $mt2=(stat $output_name)[9];
37 }
38 kill 2, $PID and "Prozess $PID gekillt\n" or warn "PID $PID ist nicht vorhanden, kann nicht killen, bitte per Hand killen!\n";
Danke für die Antworten...
MfG
Rahul
Lesezeichen