use 5.20.2; use warnings; use threads; use Time::HiRes qw/ usleep /; $SIG{USR2} = 'IGNORE'; $SIG{TERM} = 'IGNORE'; if (fork() == 0) { sleep 1; my $ppid = getppid(); for (1 .. 1000) { usleep(int(rand(100000))); kill 'USR2', $ppid; kill 'TERM', $ppid; } } $SIG{TERM} = sub { say "TERM"; }; $SIG{USR2} = sub { say "USR2"; }; my $thread = threads->create(sub { $SIG{TERM} = sub { say "THREAD TERM"; }; $SIG{USR2} = sub { say "THREAD USR2"; }; sleep 10; threads->exit(); }); sleep 10; while ($thread->is_running()) { usleep 1000; } while (! $thread->is_joinable()) { usleep 1000; } $thread->join(); #### USR2 TERM USR2 TERM THREAD USR2 THREAD TERM #### This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linux-gnu-thread-multi (with 85 registered patches, see perl -V for more detail)