Как выполнить внешнюю программу из Perl и продолжить выполнение сценария perl - PullRequest
0 голосов
/ 01 апреля 2020

Я запускаю скрипт perl из задания cron в Ubuntu. Как часть сценария, он должен выполнить внешнюю программу и не ждать завершения программы, а также продолжить выполнение сценария. Я пробовал следующее, но насколько я могу судить, это не выполняет программу, а также швы, чтобы не продолжить сценарий.

exec("/usr/bin/dotnet /usr/local/myprogram/myprogram.dll arg1, arg2, moreargs")
    or print STDERR "Couldn't exec myprogram";

1 Ответ

2 голосов
/ 02 апреля 2020
  • Чтобы вызвать вашу программу, вы должны передать аргументы программы как отдельные аргументы exec. (См. https://perldoc.perl.org/functions/exec.html.)
  • Поскольку вы хотите, чтобы скрипт выполнялся без ожидания возврата программы, вы должны использовать fork (см. https://perldoc.perl.org/functions/fork.html) так что у вас есть два отдельных процесса, запущенных параллельно (один запускает программу, другой запускает остальную часть сценария).

Итак:

my $child_pid = fork();
die "Couldn't fork" unless defined $child_pid;
if (! $child_pid) {
  exec '/usr/bin/dotnet', '/usr/local/myprogram/myprogram.dll', 'arg1', 'arg2', 'moreargs';
  die "Couldn't exec myprogram: $!";
}

# rest of script

wait();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...