다른 스크립트 newscript.pl
을 호출하는 Perl 스크립트 (예 : script.pl
)를 작성하고 있습니다. 두 스크립트의 PID를 script.pl
에만 가져오고 싶습니다. 본인은 PID가 script.pl
이 newscript.pl
에 의해 생성 된 캡처 할 newscript.pl
Perl의 시스템 기능으로 생성 된 프로세스의 PID를 얻으려면 어떻게해야합니까?
system("perl newscript.pl");
실행 내가 system
를 호출이 후 다음 코드
my $pid = Unix::PID->new();
my @p = $pid->get_pidof($pid->get_command($$), 1);
를 사용하여 script.pl
의 PID를 얻을 수 있습니다.
내 script.pl은 newscript.pl 및 기타 많은 스크립트와 같은 다른 스크립트를 예약하는 작업을 수행합니다. 나는 cron에서 직접 스케쥴링을 할 수 없으므로 스케줄러 역할을하는이 상위 스크립트를 작성하려고 생각했다. 자, MySql 데이터베이스에서 스크립트 이름을 얻는 동안 예약 된 스크립트가 반복되는 경우가있을 수 있습니다. 이미 실행중인 스크립트를 원하지 않습니다. 따라서 예약 된 스크립트의 PID를 캡처 할 수 있다면 생각하고있었습니다. 나는이 Pids의 기초를 검사하고 동일한 원본의 동시 실행을 피할 수있다.당신의 도움에 감사드립니다. – Deepak
포크를 사용하지 않고 다른 방법이 있습니까? – Deepak
배타성이 필요하면'flock()'을 사용하십시오. 'Fcntl qw (: flock) 사용; flock ($ lockfd, LOCK_NB | LOCK_EX) 또는 "같은 스크립트가 이미 실행 중입니다"; # ...'$ lockfd는 filename이 아닌 파일 설명자입니다 (flock하기 전에 열어야 함). – Dallaylaen