Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в скрипте запусить несколько процессов, запуск нескольких процессов 
:(
    Опции темы
study
Дата 1.11.2004, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Народ, подскажите мне пожалуйста, как мне в скрипте запустить несколько, одновременно выполняющихся программ, и если какая-то затянулось, то убить её (программу). Если можно пример или ссылку, где можно почитать как это делается. Заранее спасибо.
PM MAIL   Вверх
chaos
Дата 1.11.2004, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



почитай про fork()
Добавлено @ 12:38
Вот не большой пример
Код
$pid = fork;
if ($pid == -1) {print "Error fork"; die;}
if ($pid != 0) {exit;}
$pid=setsid;
if ($pid == -1) {die "Error setsid";}

PM WWW   Вверх
study
Дата 1.11.2004, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



chaos, я попробовал сделать что-то с fork(), но я не разобрался, дай ссылку где про fork() написанно. Смотри, мне в цикле надо считывать строку из файла и запустить процесс. Я сделал все с помощью system(), всё хорошо работает, но слишком долго :( , теперь мне надо разделить, чтобы, например из файла считать 10 строк и сразу запустить 10 процессов, как это сделать :qstn
PM MAIL   Вверх
chaos
Дата 1.11.2004, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



Цитата(study @ 1.11.2004, 12:57)
chaos, я попробовал сделать что-то с fork(), но я не разобрался, дай ссылку где про fork() написанно. Смотри, мне в цикле надо считывать строку из файла и запустить процесс. Я сделал все с помощью system(), всё хорошо работает, но слишком долго :( , теперь мне надо разделить, чтобы, например из файла считать 10 строк и сразу запустить 10 процессов, как это сделать :qstn

а что за процессы? Ты наверное имеешь в виду другие программы, имена каторых ты читаешь в файли или чтьо?
PM WWW   Вверх
study
Дата 1.11.2004, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



chaos запускается программа, а в файле входные данные к программе. Программа должна запускаться, например, 50 раз (зависит от строк в файле), из-за этого скрипт работает долго. Мне надо, чтобы я мог считать из файла, например, 10 строк и одновременно запустить 10 программ.
PM MAIL   Вверх
chaos
Дата 1.11.2004, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



Цитата(study @ 1.11.2004, 14:12)
chaos запускается программа, а в файле входные данные к программе. Программа должна запускаться, например, 50 раз (зависит от строк в файле), из-за этого скрипт работает долго. Мне надо, чтобы я мог считать из файла, например, 10 строк и одновременно запустить 10 программ.

а че тебя не устраивает 10 раз вызвать system?
PM WWW   Вверх
Nobody
Дата 1.11.2004, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

Репутация: нет
Всего: 16



study

Код
#!/usr/bin/perl -w
use strict;
use vars qw($pid $i @programs);
@programs = (
'/path/to/prog1',
'/path/to/prog2',
'/path/to/prog3',
'/path/to/prog4',
);
for ($i = 0; $programs[$i]; $i++) {
if (!defined ($pid = fork())) {
 die "cannot fork: $!";
} elsif ($pid == 0) {
 exec ($programs[$i]);
}
}


А теперь замени жёстко заданный список программ на то, что ты читаешь из файла.


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
study
Дата 1.11.2004, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Спасибо Nobody, попробую, а как мне узнать как завершилась программа? exec(), что-нибудь возвращает?
И если можно подскажи, как мне убить прогу, если она не завершилась в течение 10 секунд.

Это сообщение отредактировал(а) study - 1.11.2004, 16:22
PM MAIL   Вверх
chaos
Дата 1.11.2004, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



Цитата(Nobody @ 1.11.2004, 16:00)
study

Код
#!/usr/bin/perl -w
use strict;
use vars qw($pid $i @programs);
@programs = (
'/path/to/prog1',
'/path/to/prog2',
'/path/to/prog3',
'/path/to/prog4',
);
for ($i = 0; $programs[$i]; $i++) {
if (!defined ($pid = fork())) {
 die "cannot fork: $!";
} elsif ($pid == 0) {
 exec ($programs[$i]);
}
}


А теперь замени жёстко заданный список программ на то, что ты читаешь из файла.

Я считаю что в данном случае system'а за глаза хватит, fork хорошо бы сгодился если бы надо было бы хапускать несколько копий одного приложения
PM WWW   Вверх
study
Дата 1.11.2004, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Цитата(chaos @ 1.11.2004, 14:25)

а че тебя не устраивает 10 раз вызвать system?


потому что system() ждёт завершения программы, а мне нужно одновременно сразу несколько запустить, чтобы ускорить процесс.
PM MAIL   Вверх
study
Дата 3.11.2004, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Nobody, подскажи мне. Как отслеживать, если выполнение exec() затянулось, то как мне завершить этот процесс.
PM MAIL   Вверх
lockdock
Дата 11.11.2004, 15:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











man wait
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.