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; } }
In reply to Re: yet another thread/signal question
by zentara
in thread yet another thread/signal question
by markseger
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |