My experience has been that you can get signals to a thread, but it's totally unpredictable - sometimes the child thread(s) will get the signal and sometimes the main thread gets it. Still, in the end it's not really usable.The way it works is the main thread gets all signals first, then it sends them on to the child threads... makes sense to me. Then each thread needs to have it's own handler. Each thread can be tracked by it's pid. Here is a simple script to play with. :-)
#!/usr/bin/perl
use warnings;
use strict;
use threads 'exit' => 'threads_only';
my $thr;
print "I'm the parent pid-> $$\n";
my $thr1 = threads->new(\&sub1);
my $thr2 = threads->new(\&sub2);
my $thr3 = async{
my $myobject = threads->self;
my $mytid= $myobject->tid;
$SIG{'KILL'} = sub{ print "tid $mytid exiting\n"; threads->exit() }
+;
print "In the thread $myobject tid->$mytid \n";
my $count = 0;
while(1){
$count++;
print "\t\t\t\t\t\t\t\t$mytid -> $count\n";
sleep 1;
}
};
for(1..10){
print "$_\n";
if( $_ == 4 ){ $thr1->kill('KILL')->detach }
if( $_ == 7 ){ $thr2->kill('KILL')->detach }
if( $_ == 9 ){ $thr3->kill('KILL')->detach }
sleep 1;
}
exit;
sub sub1{
my $myobject = threads->self;
my $mytid= $myobject->tid;
$SIG{'KILL'} = sub{ print "tid $mytid exiting\n"; threads->exit() };
print "In the thread $myobject tid->$mytid \n";
my $count = 0;
while(1){
$count++;
print "\t\t\t$mytid -> $count\n";
sleep 1;
}
}
sub sub2{
my $myobject = threads->self;
my $mytid= $myobject->tid;
$SIG{'KILL'} = sub{ print "tid $mytid exiting\n"; threads->exit() };
print "In the thread $myobject tid->$mytid \n";
my $count = 0;
while(1){
$count++;
print "\t\t\t\t\t$mytid -> $count\n";
sleep 1;
}
}
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|