URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9331
[ Назад ]

Исходное сообщение
"Perl, `` и вложенные скрипты."

Отправлено madar , 16-Дек-11 19:41 
Есть перловый скрипт (в примере ниже - 12.pl) который через `` (обратные кавычки) запускает скрипт на шелле (1.sh), который, в свою очередь, в бэкграунде (&) запускает еще один шелловый скрипт (2.sh):

-- 12.pl
#!/usr/bin/perl
my $gg = `/dir/1.sh`;

======================

-- 1.sh :
#!/bin/sh

/dir/2.sh &
exit 0

======================

-- 2.sh :
#!/bin/sh

sleep 5
exit 0

======================

В результате, выполнение в перле `/dir/1.sh` занимает 5 секунд - т.е. он ждет завершения 2.sh несмотря на то, что 1.sh уже закончился.


Можно ли сделать так, чтобы `/dir/1.sh` завершился на момент выхода (exit 0) из 1.sh? (т.е. не ждать 2.sh)

ps. $ perl -v

This is perl, v5.8.8 built for x86_64-linux-thread-multi


Содержание

Сообщения в этом обсуждении
"Perl, `` и вложенные скрипты."
Отправлено XAnder , 16-Дек-11 20:42 
Попробуйте использовать system вместо ``. Там, правда, труднее перехватить вывод скриптов, но они у вас, похоже, ничего и не выводят.

Как вариант, в перловой программе можно сделать fork, и пусть ждёт дочерний процесс.


"Perl, `` и вложенные скрипты."
Отправлено madar , 17-Дек-11 15:17 
> Попробуйте использовать system вместо ``. Там, правда, труднее перехватить вывод скриптов,
> но они у вас, похоже, ничего и не выводят.

Это да, с system работает. Непонятно только - почему такая разница?

> Как вариант, в перловой программе можно сделать fork, и пусть ждёт дочерний
> процесс.

ОК, попробую еще fork..