Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6160[/thread]

Wie stoppe ich den Hintergrundprozess?

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
kolla
 2004-03-25 10:37
#81207 #81207
User since
2004-03-25
12 Artikel
BenutzerIn
[default_avatar]
als "Neuer" erst einmal ein Hallo an die gesamte Gemeinde...

ich bin ein Perl-Anfänger und bräuchte 'nen Tipp zu folgenden Problem ( also Tipp oder Denkansatz, der mich auf den richtigen Weg bringt )

zum besseren Verständnis erst einaml eine "grobe" Umgebungsbeschreibung:
1. ein Linux-Rechner der ununterbrochen Daten vom COM-Port sammelt und in ein ASCII-File schreibt (dies sind Meßdaten eines Meßsystems mit MS-DOS-ähnlichen BS, die eigentlich auf 'nen Printer gehen sollten)
Code: (dl )
cat < /dev/ttyS0 | sed -e"s/[^[:print:]]/X/g; s/Xr0\|Xr1\|Xr2/ /g; /Ä/d; /ZW/d; /Wert/d" >> /daten/grec.txt & 

2. ein Linux-Rechner auf dem ein PERL-Script in einer Endlos-Schleife läuft, dass Daten aus der Textdatei des 1.Rechners ausliest, bearbeitet, verdichtet und in Tabellen von mySQL ablegt.
Da nun die Textdatei auf dem 1.PC immer größer wird, wäre es ja günstig - wenn mein Perl-Script die gelesenen Zeilen auch löschen könnte. Dies geht natürlich nicht, das das Shell-Script permanent Daten anhängt.

Nun könnte ich ja den Hintergrund-Prozeß der den Datenstrom von ttyS0 nach grec.txt umleitet auch aus einem
Perl-Script starten - und zu bestimmten Zeitpunkten ( z.B. alle 10Stunden ) anhalten, damit in der Datei gelöscht werden kann...
Wie macht man sowas in PERL???
( also, wie startet man so'nen Prozeß in Perl, so dass man ihn auch wieder "kill(en)" kann ??? )

Schon 'mal vielen Dank, für Eure Mühe

Walter
lichtkind
 2004-03-25 11:16
#81208 #81208
User since
2004-03-22
5680 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
perl befehl localtime muss du einfach vergleichen mit dem wert den du haben willst und wenn der überschritten ist tja normal script beenden

localtime liefert einen @rray[ wochentag, monat, tag, h,min,sec ,jahr]

oder so ähnlich
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
kolla
 2004-03-25 12:03
#81209 #81209
User since
2004-03-25
12 Artikel
BenutzerIn
[default_avatar]
[quote=lichtkind,25.03.2004, 10:16]perl befehl localtime muss du einfach vergleichen mit dem wert den du haben willst und wenn der überschritten ist tja normal script beenden

localtime liefert einen @rray[ wochentag, monat, tag, h,min,sec ,jahr]

oder so ähnlich[/quote]
Quote
perl befehl localtime muss du einfach vergleichen ...


hmm - das ist schon klar...
ich denke, ich habe wohl nicht sauber formuliert:
also:
ich möchte in Perl ein UNIX-Befehl absetzen, und zwar als Hintergrundprozeß
Code: (dl )
cat < /dev/ttyS0 | sed -e"..." >> /win/gre.txt &

(ich denke 'mal dies geht mit "system")
dann bräuchte ich in Perl die PID des Prozesses ( wo und wie bekomme ich die? ) damit ich später den Prozeß mit "kill" wieder beenden kann.

Es bringt mir nichts, wenn ich den Betriebssystem Befehl als normalen Prozeß starten würde und zum Zeitpunk x einfach das Perl-Script beenden würde - weil ich nach dem Löschen im ASCII-File den Prozess -aus dem PerlScript heraus- auch wieder starten muß.
ptk
 2004-03-25 12:10
#81210 #81210
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
$pid = fork;
if ($pid == 0) {
exec hintergrundprozess;
}
....
kill 9 => $pid;
lichtkind
 2004-03-25 12:22
#81211 #81211
User since
2004-03-22
5680 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
regex ist dein freund, bin aus unix welt ein paar jahre raus aber du kannst die prozessliste dir holen, zeilenweise im array speichern und nach cat suchen notfalls mit dem prozessstartzeit vergleichen die hast du ja selbst bestimmt so müsstest du auch die id bekommen
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
renee
 2004-03-25 12:24
#81212 #81212
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
naja, einfach nur nach cat suchen dürfte vielleicht nicht reichen. Vielleicht gibt es ja einen zweiten Prozess mit "cat".
ptk's Lösung ist die schönere und sicherere - und vorzuziehen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
kolla
 2004-03-25 12:39
#81213 #81213
User since
2004-03-25
12 Artikel
BenutzerIn
[default_avatar]
Hi Leute!

Danke, Danke erstmal...

fork & exec das ist's -was ich suche...

lese mich gerade ein ( habe zwar noch nicht verstanden, wieso fork auch "undef" zurückgeben kann ... aber, ich lese 'mal weiter )

cu Walter
ptk
 2004-03-25 12:47
#81214 #81214
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=kolla,25.Mar..2004, 11:39]lese mich gerade ein ( habe zwar noch nicht verstanden, wieso fork auch "undef" zurückgeben kann ... aber, ich lese 'mal weiter )[/quote]
Fehlende Systemresourcen (zu wenig Speicher, maximale Anzahl an Prozessen erreicht). Genaueres steht im "ERRORS"-Abschnitt in der fork-Manpage deines Systems.
ptk
 2004-03-25 12:51
#81215 #81215
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=lichtkind,25.Mar..2004, 11:22]regex ist dein freund, bin aus unix welt ein paar jahre raus aber du kannst die prozessliste dir holen, zeilenweise im array speichern und nach cat suchen notfalls mit dem prozessstartzeit vergleichen die hast du ja selbst bestimmt so müsstest du auch die id bekommen[/quote]
Lieber nicht --- ps ist eines der inkompatibelsten Programme in der Unix-Welt, dessen Ausgabe ausserdem oft Ueberraschungen bietet. Eine bessere Loesung ist das Proc::ProcessTable-Modul.
kolla
 2004-03-25 12:58
#81216 #81216
User since
2004-03-25
12 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,25.03.2004, 11:47][quote=kolla,25.Mar..2004, 11:39]lese mich gerade ein ( habe zwar noch nicht verstanden, wieso fork auch "undef" zurückgeben kann ... aber, ich lese 'mal weiter )[/quote]
Fehlende Systemresourcen (zu wenig Speicher, maximale Anzahl an Prozessen erreicht). Genaueres steht im "ERRORS"-Abschnitt in der fork-Manpage deines Systems.[/quote]
Quote
...Genaueres steht im "ERRORS"-Abschnitt in der fork-Manpage deines Systems.


yeah - da kommt aber "minus eins" zurück ;-)

Auf jeden Fall komme ich jetzt weiter - Danke nochmal für die vielen und schnellen Antworten

Walter
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2004-03-25 10:37.