How do I get the process id for the perl process that's running the current script? getppid() doesn't return the same pid as ps -ea| grep . Is there is an easy way or do I just run the ps -ea command within my script and trim off the other pieces of info?
Asked
Active
Viewed 3.4k times
3 Answers
15
You can use $$ to get the process ID of the perl interpreter running your script:
iancs-imac:Documents ian$ cat test.pl
print "$$\n";
sleep(10000);
exit()
ians-imac:Documents ian$ perl test.pl
42291
In another shell:
iancs-imac:~ ian$ sudo ps -ef | grep perl
501 42291 42281 0 0:00.00 ttys000 0:00.01 perl test.pl
501 42297 42280 0 0:00.00 ttys001 0:00.00 grep perl
To learn more about about special Perl variables:
perldoc perlvar
Ian C.
- 6,209
3
In addition to $$ as Ian mentions, I'm a fan of making code more readable.
To that end, Perl supports the mnemonic $PID if you use English to enable the aliases.
Randall
- 306
0
If you ended up here looking to a solution to $PID not being defined in BEGIN { ... }, POSIX::getpid() works there.
Russell Stuart
- 101