Forum Webscript.Ru

Программирование => Perl => Тема начата: Nickolaz от 22 Ноября 2005, 12:08:44

Название: Запуск скриптов из скрипта
Отправлено: Nickolaz от 22 Ноября 2005, 12:08:44
Здравствуйте, многоуважаемые знатоки!

Эта тема логическое продолжение первой темы :) (http://forums.webscript.ru/showthread.php?s=&threadid=21820&msgnum=6), в решении которой очень помог NeoNox, за что ему отдельное спасибо!
Второй вопрос может покажется совсем уж простым, но тем лучше :)  
Как из запущенного скрипта запустить другие скрипты по циклу, но не ожидать конца их выполнения и не получать никаких данных, а после запуска последнего завершить выполнение.

Заранее спасибо за ответ!
Название: Запуск скриптов из скрипта
Отправлено: NeoNox от 22 Ноября 2005, 12:15:42
perldoc -f fork
perldoc -f exec
Название: Запуск скриптов из скрипта
Отправлено: Nickolaz от 22 Ноября 2005, 13:34:16
NeoNox
Спасибо за совет! Но никак не получается запустить скрипты по циклу и не ждать конца их выполнения :( Уже всё перепробовал.

Может быть у Вас есть простенький пример запуска серии скриптов без возвращения результатов в родительский скрипт?

Поясню более детально: есть скрипт, который проверяет количество (и имена) процессов, которые на текущий момент запущены, затем, отталкиваясь от этого количества, он запускает другие скрипты (каждый из которых выполняться может и 3 часа) параллельно, а сам заканчивает работу. При этом в ps отображаются все запущенные скрипты...
Вроде всё просто звучит, но никак не могу найти ответ :(
Буду беспредельно благодарен за ответ! :)
Название: Запуск скриптов из скрипта
Отправлено: NeoNox от 22 Ноября 2005, 14:54:26
Цитировать
Nickolaz:
Но никак не получается запустить скрипты по циклу и не ждать конца их выполнения Уже всё перепробовал.

Там не нужно ничего пробовать. Покажите что уже написано.
Название: Запуск скриптов из скрипта
Отправлено: Nickolaz от 22 Ноября 2005, 16:21:32
наверняка что-то неправильно :(

вот код:
#!/usr/bin/perl
$SIG{CHLD}=\'IGNORE\';
for ($i=0; $i<10; $i++)
{
$pid = fork();
if ($pid eq \'0\'){
   exec("perl scr.pl A$i");
   exit 0;
}
}


и scr.pl (не так важно что тут - но работать это что может дооолго :) ):
open (FILE,">file-".$ARGV[0]);
print FILE $ARGV[0]."\\n";
close FILE;

for (my $i=0;$i<100;$i++)
{
print $ARGV[0]."\\n";
}

Это всё, конечно, примерно. И наверное всё неправильно :(
Очень прошу помочь!!
Название: Запуск скриптов из скрипта
Отправлено: NeoNox от 22 Ноября 2005, 17:15:22
тебе, похоже, форк не очень нужен. exec сам порождает процесс.

а так?

for ($i=0; $i<10; $i++)
{
       exec("perl scr.pl A$i");
}
Название: Запуск скриптов из скрипта
Отправлено: arto от 22 Ноября 2005, 17:27:29
# cat > test.pl
#! /usr/bin/perl
print "@ARGV\\n";
exit;
^D
# chmod +x test.pl
# perl -e \'fork () == 0 && exec "./test.pl $_" foreach (1..$ARGV[0]);\' 10
1
2
3
4
5
6
8
9
# 7
10
#  perl -e \'exec "./test.pl $_" foreach (1..$ARGV[0]);\' 10
1
#
Название: Запуск скриптов из скрипта
Отправлено: NeoNox от 22 Ноября 2005, 17:57:32
arto прав.
Название: ОГРОМНОЕ СПАСИБО!
Отправлено: Nickolaz от 22 Ноября 2005, 18:59:26
arto, твой код действительно подходит именно для моих задач :)

Огромное спасибо, arto и NeoNox!
Вы мне очень помогли!
Этот форум - лучший из тех что я видел!!!


:beer:
Название: Запуск скриптов из скрипта
Отправлено: Nickolaz от 22 Ноября 2005, 19:13:09
Сегодня праздник - узнал кое-что интересненькое, и поэтому позволю себе еще раз отвлечь arto :)

Не подскажешь, почему не работал мой код:

#!/usr/bin/perl
$SIG{CHLD}=\'IGNORE\';
for ($i=0; $i<10; $i++)
{
$pid = fork();
if ($pid eq \'0\'){
   exec("perl scr.pl A$i");
   exit 0;
}
}

?
Название: Запуск скриптов из скрипта
Отправлено: NeoNox от 22 Ноября 2005, 20:38:32

#!/usr/bin/perl
$SIG{CHLD}=\'IGNORE\';

for ($i=0; $i<10; $i++)
{
        $pid = fork();
        if ($pid eq \'0\'){
            exec("perl scr.pl $i");
            exit 0;
        }
}


scr.pl:

#!/usr/bin/perl
open FH, \'>>\', \'./aaa\';
print FH $ARGV[0]."--".$$."\\n";
close FH;

в файле ааа найдешь 10 записей типа
0--9411
1--9412
2--9413
3--9414
4--9415
5--9416
7--9418
8--9419
6--9417
9--9420
Название: Запуск скриптов из скрипта
Отправлено: arto от 22 Ноября 2005, 21:55:45
# perl -e \'$SIG{CHLD}="IGNORE"; foreach (0..9) { $pid = fork (); if ($pid == 0) { exec "./test.pl","A$_"; exit; }}\'
A0
A1
A2
A3
A4
A5
A6
A7
A8
# A9