Почему эта команда не работает в фоновом режиме, которая заключена в Backticks (PERL) - PullRequest
0 голосов
/ 16 февраля 2012

Я запускаю скрипт с аргументами внутри скрипта perl.Сценарий и аргументы заключены в обратные знаки.Когда я наконец использую символ «&» после аргументов, команда не выполняется в фоновом режиме, она выполняется на переднем плане.Может кто-то найти ошибку в моей программе.Мне нужно сохранить вывод и перенаправить его в одну переменную, а затем в журнал.

Ниже приведен мой код:

open (MYSM, "> /logs/${SM}.smlog");
open (MYSP, "> /logs/${SM}.splog");
$SM_LOG_VAR = ` ./sm.sh  $SE_VER  $SMS_VERSION   & ` ;
$SP_LOG_VAR = ` ./sp.sh  $SE_VER  $SMS_VERSION ` ;
print MYSM  $SM_LOG_VAR ;
print MYSP  $SP_LOG_VAR ;
close(MYSM);
close(MYSP);

Строка:

$SM_LOG_VAR = ` ./sm.sh  $SE_VER  $SMS_VERSION   & ` ;  

не работает в фоновом режиме, который полностью заключен в галочки.

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012

Сами обратные пометки будут выполняться только после завершения команды. Вы хотите что-то вроде fork + exec или, возможно, dup2. В любом случае, как программа продолжит работу со значением $SM_LOG_VAR, если команда для получения этой информации еще не завершена?

1 голос
/ 16 февраля 2012

Я думаю, что вы задали неправильный вопрос, прочитав код, позвольте мне угадать вашу настоящую проблему.У вас есть Perl-скрипт, который выполняет некоторую работу, не показанную для установки некоторых переменных, которые затем используются для запуска 2 внешних программ.Вы хотите запустить обе программы одновременно и сохранить выходные данные каждой из них в своем собственном файле журнала.

Самый простой способ сделать это - запустить обе программы в фоновом режиме, а оболочка выполнит перенаправление.

system("./sm.sh  $SE_VER  $SMS_VERSION > /logs/${SM}.smlog &");
system("./sp.sh  $SE_VER  $SMS_VERSION > /logs/${SM}.splog &");

Это вернется к вашему сценарию, не дожидаясь завершения какой-либо программы, если позже в программе есть код, требующий завершения команд, вам может потребоваться более сложное решение.

0 голосов
/ 16 февраля 2012

Я бы посмотрел на: Perl Backticks

Если вы хотите запустить его в фоновом режиме, я бы попробовал что-то вроде open3: IPC :: Open3

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