#!perl use strict; use warnings; use if ($^O eq 'MSWin32'), 'Win32::Getppid'; my $parent; my $invoker; BEGIN{ if ($^O eq 'MSWin32') { $parent = getppid; open my $cmd,"tasklist /nh /FI \"PID eq $parent\" |" or die; while (<$cmd>){ chomp; next if /^$/;# yes it outputs a leading empty line.. $invoker = $1 if /^([\w\d\.]+)\W/; } } else { $parent = getppid; open my $cmd,"ps -p $parent|" or die; while (<$cmd>){ chomp; next if /^[\sA-Z]+$/;# get rid of heaader: freebsd does not support no header output $invoker = $1 if /\s([\w\d\.]+)$/; } } } print "Perl (PID $$) was invoked from PID $parent ($invoker)\n";