9

Как получить идентификатор процесса для процесса perl, который выполняет текущий скрипт? getppid() не возвращает тот же pid, что и ps -ea | grep. Есть ли простой способ, или я просто запускаю команду ps -ea в моем скрипте и обрезаю другие части информации?

2 ответа2

8

Вы можете использовать $$ для получения идентификатора процесса интерпретатора Perl, выполняющего ваш скрипт:

iancs-imac:Documents ian$ cat test.pl 
print "$$\n";
sleep(10000);
exit()

ians-imac:Documents ian$ perl test.pl 
42291

В другой оболочке:

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

Чтобы узнать больше о специальных переменных Perl:

perldoc perlvar

Или посмотрите официальную онлайн-версию этой информации.

1

В дополнение к $$ как упоминает Ян, я люблю делать код более читабельным.

Для этого Perl поддерживает мнемонический $PID если вы use English для включения псевдонимов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .