Hi,
The newer threads have a feature to send a signal to threads thru the
syntax
# Send a signal to a thread
$thr->kill('SIGUSR1');
Since killing threads was one of the trickiest parts of the older versions of the threads module, I was eager to test this out. But I'm getting segfaults and process crashes with the following simple test script. My Perl version is 5.12.2 with threads enabled.
#!/usr/bin/perl
use warnings;
use strict;
use threads;
print "I'm the parent pid-> $$\n";
my $thr = threads->new(\&sub1);
my $thr1 = threads->new(\&sub2)->detach;
for(1..15){
print "$_\n";
if( $_ == 5 ){ $thr->kill('SIGUSR1') }
if( $_ == 10 ){ $thr1->kill('SIGKILL') }
sleep 1;
}
exit;
sub sub1{
# uncommenting the following stops the segfault
# but still crashes the program
#local $SIG{'SIGUSR1'} = sub{ print "yikes\n" };
my $myobject = threads->self;
my $mytid= $myobject->tid;
print "In the thread $myobject tid->$mytid \n";
my $count = 0;
while(1){
$count++;
print "\t\t\t$mytid -> $count";
sleep 1;
}
}
sub sub2{
my $myobject = threads->self;
my $mytid= $myobject->tid;
print "In the thread $myobject tid->$mytid \n";
my $count = 0;
while(1){
$count++;
print "\t\t\t\t\t\t$mytid -> $count";
sleep 1;
}
}
So how would you successfully send a SIGKILL to a thread, so that only that target
thread dies? Is it even possible?