#!/usr/bin/perl -w use threads; use threads::shared; use Log::Log4perl qw(get_logger :levels); Log::Log4perl->init_and_watch('/home/kg/log.conf', 'QUIT'); my $logger = get_logger(); $logger->level($INFO); my $thr1 = threads->create(\&thread1); my $thr2 = threads->create(\&thread2); my $thr3 = threads->create(\&thread3); $SIG{INT} = sub { my $sig = shift; my $tid = threads->tid(); print "Thread $tid received $sig\n"; foreach my $thr (threads->list()) { print "Sending QUIT to thread with tid ", $thr->tid, "\n"; $thr->kill('QUIT'); } }; print "PID: $$\n"; while () { sleep 10; my $date = `date`; chomp $date; print $date, ": I'm the main program\n"; } sub thread1 { while () { my $logger = get_logger(); $logger->info("I'm thread1"); sleep 10; } } sub thread2 { my $logger = get_logger(); while () { $logger->info("I'm thread2"); sleep 10; } } sub thread3 { my $logger = get_logger(); while () { $logger->info("I'm thread3"); sleep 10; } }