Thread Kill von Threads (4 answers)
Opened by wenze at 2007-03-09 16:09

wenze
 2007-03-09 16:09
#74885 #74885
User since
2006-06-15
29 Artikel
BenutzerIn
[default_avatar]
Hi,

jetzt bin ich am verzweifeln. Folgende Zeilen bringen mir ein Segmentation fault. Mir reicht schon wenn ich wüßte, wo ich weitersuchen soll.

Und nun zu dem Skript:

Ich muss eine Langzeitsicherung schreiben. Bitte nicht nach dem Sinn fragen, ich habe es aufgegebe und schreibe einfach jetzt nur.

Ich habe mein Verzeichnis mit meinen Datenbankdateinen, mein Skript sucht nun nach Dateien größer X und und erstellt einen "tar -czvf ...". Jeder tar wird dann in einem eigenen Thread ( max. Y) gestartet.

Wenn einer von den gestarteten tars abbricht wird ein kill an die Prozessgruppe gesendet. Das "Hauptprogramm" ignoriert das Signal und ruft den Handler auf, der noch einmal ein kill sendet und den Rest wieder bereinigt (Dateien löschen ect.)

Sobald ich den kill hander aktiviere knallt es.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
local $SIG{HUP} = 'IGNORE';
$SIG{HUP} = \&SIGKILL_handler;

while ( $#todo >= 0 && $result == 0) {
last if($result > 0);
my $cmd = pop(@todo);
$sem->down(); # nur n Tasks gleichzeitig
if ( $result == 0) {
my $thread = threads->new(
\&Task,
$cmd, # neuen Thread erzeugen
);
}
}

#-------------------------------------------------------------------------
sub Task {
my (
$cmd, # Parameter
) = @_;
my $id = threads->self->tid;
$thread_run++;
$result += system ($cmd)/256;;
if ($debug == 1) { print " Return: $result \n\n"; }
$sem->up();
$thread_run--;
printf "Thread %02d: fertig.\n", $id;
if ($result >0){print "\n\n Fehler !!!!!!!!\n\n";
kill ("HUP", -$$);
}

}

#-------------------------------------------------------------------------
sub SIGKILL_handler {
print "SIG_KILL\n";
kill ("HUP", -$$);
}


Danke für jeden Tipp

View full thread Kill von Threads