zentara has asked for the wisdom of the Perl Monks concerning the following question:
The newer threads have a feature to send a signal to threads thru the syntax
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.# Send a signal to a thread $thr->kill('SIGUSR1');
So how would you successfully send a SIGKILL to a thread, so that only that target thread dies? Is it even possible?#!/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; } }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: using the thread->kill() feature on linux
by BrowserUk (Patriarch) on Oct 16, 2010 at 16:00 UTC | |
Re: using the thread->kill() feature on linux
by zentara (Cardinal) on Oct 16, 2010 at 16:47 UTC | |
Re: using the thread->kill() feature on linux
by BrowserUk (Patriarch) on Oct 16, 2010 at 17:09 UTC | |
by zentara (Cardinal) on Oct 16, 2010 at 17:21 UTC | |
Re: using the thread->kill() feature on linux
by dasgar (Priest) on Oct 16, 2010 at 16:09 UTC | |
by BrowserUk (Patriarch) on Oct 16, 2010 at 16:40 UTC |