Schrift
[thread]11889[/thread]

Bei Beenden des Scripts alle Threads schließen



<< >> 4 Einträge, 1 Seite
unexpected
 2008-05-22 20:18
#110137 #110137
User since
2008-05-22
2 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ich habe ein Perl Script geschrieben, dass in etwa folgende Struktur hat:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl
...
use threads;

....
my($thr) = threads->new(\&showpic);
....
    


sub showpic { 
        system "eog $picfilename";
}


Dieses Script führt einige Operationen durch und soll währenddessen ein Bild anzeigen mit "Eye of Gnome" (einem Bildbetrachtungsprogramm für Gnome).
Ich hätte nun gerne, dass Eye of Gnome geschlossen wird, sobald das Hauptskript beendet ist. Meinem Verständnis nach sollte dies passieren, wenn ich den Thread schließe, den ich mit threads->new erzeugt habe.

Ich habe es schon mit $thr->kill('KILL'); probiert, dort bekomme ich allerdings die Meldung:
Code: (dl )
Can't locate auto/threads/kill.al in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at <snip>
murphy
 2008-05-23 06:17
#110147 #110147
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Zunächst einmal kann ich sagen, dass bei mir unter MacOS X 10.5 &threads::kill auch nicht funktioniert. Das systemeigene Perl 5.8.8 liefert den gleichen Fehler wie bei Dir, das selbstkompilierte Perl 5.10.0 segfaultet.

Aber es ist ausgesprochen wahrscheinlich (wenngleich ein wenig systemabhaengig), dass das externe Programm sowieso den gesamten Perlprozess blockiert und nicht nur den Thread, aus dem es gestartet wurde.

Ich wuerde doch eher zu fork, exec und kill raten:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use strict;
use warnings;

[...]

my $pid = fork;
die "Failed to fork: $!\n" unless (defined $pid);
unless ($pid) {
  exec '/path/to/program', 'argument';
  die "Failed to exec: $!\n";
}

[...]

{
  local $SIG{CHLD} = 'IGNORE';
  kill TERM => $pid or die "Failed to kill $pid: $!\n";
}

When C++ is your hammer, every problem looks like your thumb.
renee
 2008-05-23 11:18
#110150 #110150
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wenn man CPAN:forks verwendet, braucht man sein Programm mit den Threads kaum verändern...
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/
unexpected
 2008-05-23 15:51
#110174 #110174
User since
2008-05-22
2 Artikel
BenutzerIn
[default_avatar]
Toll, danke für die Antworten!
<< >> 4 Einträge, 1 Seite



View all threads created 2008-05-22 20:18.