bag*_*man 2 perl multithreading fork
在这个程序中,我创建一个fork,然后从它调用domultithreading.然后它创建一些线程.
sub domultithreading {
#Not my function
my ($num) = @_;
my @thrs;
my $i = 0;
my $connectionsperthread = 50;
while ( $i < $num ) {
$thrs[$i] = threads->create( \&doconnections, $connectionsperthread, 1 );
$i += $connectionsperthread;
}
my @threadslist = threads->list();
while ( $#threadslist > 0 ) {
$failed = 0;
}
}
sub kill {
#how can I kill the threads made in domultithreading?
kill 9, $pid;
print "\nkilling $pid\n";
}
Run Code Online (Sandbox Code Playgroud)
然后我希望能够杀死fork及其线程,但是我无法理解它.有什么建议?
非常感谢
Perl提供了两种并发模型:进程和线程.虽然你不应该在没有充分理由的情况下将这两者混合在一起,但是线程会非常密切地建模过程,因此我们几乎可以对它们进行处理.具体来说,我们可以向线程发送信号.
可以使用以下kill 函数发出进程信号:kill SIGNAL => $pid,可以使用以下kill 方法发出线程信号:$thr->kill(SIGNAL).此方法返回线程对象.在%SIG散列中设置信号处理程序时可以截取信号.
这意味着每个进程TERM信号处理程序TERM都是所有子线程的
$_->kill(9)->join() for threads->list;
Run Code Online (Sandbox Code Playgroud)
并且每个线程TERM信号处理程序只是退出线程,或者清理:
threads->exit; # exit the current thread
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3016 次 |
| 最近记录: |