Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Who called Perl? (solved)

by Discipulus (Canon)
on Mar 02, 2015 at 12:54 UTC ( [id://1118407]=note: print w/replies, xml ) Need Help??


in reply to Who called Perl?

Thanks to you all monks, named or unnamed ones.
I putted the pieces togheter and this was the result (ugly code I know, the command parsing over other things):
#!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 no +t support no header output $invoker = $1 if /\s([\w\d\.]+)$/; } } } print "Perl (PID $$) was invoked from PID $parent ($invoker)\n";
It outputs the correct thing in 3 different test cases:
cmd.exe>perl who_called_Perl.pl Perl (PID 17400) was invoked from PID 10576 (cmd.exe) powershell> perl.exe who_called_Perl.pl Perl (PID 18212) was invoked from PID 11272 (powershell.exe) bash$ perl who_called_perl.pl Perl (PID 73288) was invoked from PID 31994 (bash)

L*
There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1118407]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (2)
As of 2024-04-20 03:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found