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

Starten eines Programmes und fangen der STD



<< >> 8 Einträge, 1 Seite
Demian
 2006-05-30 01:37
#66726 #66726
User since
2006-05-04
11 Artikel
BenutzerIn
[default_avatar]
Hi,
bisher habe ich Programme aus meinen Programmen immer mittels:
Code: (dl )
    my $returned = `prog $opt->{option} &`; 

gestartet. Diesmal will ich allerdings ein Program wie John The Ripper starten, welches eine etwas längere Ausführungszeit hat. Dazu möchte ich es mit & am ende Aurufen und die PID speichern.

Leider scheint das Programm bei dem Code oben hängen zu bleiben, obwohl ich & angegeben habe. Kann mir das jemand erklären? (p.s: selbst mit nohup um es shellunabhängig zu machen hat es nicht funktioniert)

Danke
betterworld
 2006-05-30 01:55
#66727 #66727
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Perl wartet immer noch auf Eingabe von dem Programm. Versuch mal
Code: (dl )
`john &>/dev/null &`

Wenn Du die PID speichern moechtest, koenntest Du
Code: (dl )
my $pid=`( echo \$\$; exec john &>/dev/null )&`
verwenden, besser aber
Code: (dl )
my $pid = open F, "-|", "john" or die;
oder
Code: (dl )
my $pid = fork or exec("john") or die $!; # bitte noch um fork-Fehlerabfrage kuemmern


(Alles nicht getestet.)\n\n

<!--EDIT|betterworld|1148939855-->
Demian
 2006-05-31 19:21
#66728 #66728
User since
2006-05-04
11 Artikel
BenutzerIn
[default_avatar]
danke, ich weis das gehört jetzt vielleicht nicht hier hin, aber kann es sein, dass wenn ich einen Prozess dann mit nohup starte, sich die PID um eins erhöht? bei mir ist der Wert nämlich komischerweise immer um eins höher als der Rückgabewert :rock:
betterworld
 2006-05-31 19:28
#66729 #66729
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Es gibt ja verschiedene Versionen von nohup, aber auch bei mir scheint es noch einmal zu forken. Das Problem ist, dass Du nicht darauf verlassen kannst, dass dabei die PID genau um 1 erhoeht wird. Denn die naechste freie PID koennte auch eine andere sein.
Demian
 2006-05-31 19:32
#66730 #66730
User since
2006-05-04
11 Artikel
BenutzerIn
[default_avatar]
hmm, shice würd ich sagen :(
betterworld
 2006-05-31 19:37
#66731 #66731
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ah, ich habe mich geirrt: nohup forkt nicht, nur die Shell. Verwendest Du "exec nohup blah"?
Dubu
 2006-05-31 23:28
#66732 #66732
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Mal ganz ehrlich: Was soll perl denn bei einer Zeile wie dieser machen?
Code: (dl )
my $returned = `prog $opt->{option} &`; 

Das Programm soll bitte im Hintergrund laufen, aber trotzdem soll die Ausgabe des Programms in der Variablen $returned landen, was aber bedeutet, dass das Perl-Programm hier stehen bleiben muss, bis dieser Wert feststeht.

Der Widerspruch ist doch offensichtlich, oder?
Backticks sind hierfür also eine schlechte Idee.

fork() und exec() ist schon die richtige Wahl, wenn du die PID haben möchtest.
renee
 2006-05-31 23:36
#66733 #66733
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zu fork gibt's auch einen Wiki:Artikel
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/
<< >> 8 Einträge, 1 Seite



View all threads created 2006-05-30 01:37.