For starters, one way to silence the warning (since threads 1.33?) is to detach the threads.
#!/usr/bin/perl use threads; threads->new(\&my_sub)->detach(); threads->new(\&my_sub)->detach(); sub my_sub {}
>perl script.pl >
All it does is silence the warning. The underlying cause is still present, and it's quite serious. Your threads are being forcibly exited, doing no cleanup whatsoever. For example, the following code produces two empty files.
#!/usr/bin/perl use threads; sub my_sub { open(my $fh, '>', "$0.".threads->tid() ) or die; print $fh 'text'; sleep(10); } threads->new(\&my_sub)->detach(); threads->new(\&my_sub)->detach(); sleep(2);
If you wish to run your program in the background, either do it from the shell
$ script.pl & unix
>start /b "" script.pl Windows
or using something like:
#!/usr/bin/perl use strict; use warnings; BEGIN { # Move to running in background. if (!@ARGV || $ARGV[0] ne '--nobkg') { $SIG{CHLD} = 'IGNORE'; require IPC::Open3; IPC::Open3::open3( '<&STDIN', '>&STDOUT', '>&STDERR', $^X, $0, '--nobkg', @ARGV ); exit; } } use threads; sub my_sub { open(my $fh, '>', "$0.".threads->tid() ) or die; print $fh 'text'; sleep(10); } my $thread1 = new threads(\&my_sub); my $thread2 = new threads(\&my_sub); $_->join() for $thread1, $thread2;
In reply to Re: Suppressing thread warnings
by ikegami
in thread Suppressing thread warnings
by lennysan
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |