# Author : Basant Kumar Kukreja package wbdtrace; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(runDtraceScript); #@EXPORT_OK = qw($IsDebugPrint); $VERSION = 1.00; my $childPid = -1; my $dtracePath = "/usr/sbin/dtrace"; sub handleSigInt() { if (defined($procDesc)) { #print "Sigint called Closing\n"; if ($childPid > 0) { kill(SIGINT, $childPid); #sleep(2); close($procDesc); } } #print "Sigint called exiting\n"; print "\n"; exit(0); } sub runDtraceScript($) { my ($dtraceScript) = @_; my $pid = open($procDesc, "-|" ); die "Unable to fork" unless defined ($pid); if ($pid) { # Parent $childPid = $pid; $SIG{INT} = \&handleSigInt; return $procDesc; } else { my @dtraceOptions = ("-Z", "-q", "-n"); my @dtraceArgs = ($dtraceScript); exec($dtracePath, @dtraceOptions, @dtraceArgs); # It should never reach here"; exit(0); } return undef; }