Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Разделение на потоки

12K
13 февраля 2006 года
insidex
6 / / 12.10.2005
Тема баян - уже много раз поднималась, умные мужики молчАт, может здесь кто-нибудь посоветует что дельного?

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

Простой вызов system() или exec() только лишь запускает второй скрипт, однако первый продолжает работать,пока второй не выполнит свою задачу и все тут,хоть убей(. Посоветуйте что-нибудь,нужен креатив! THANKS!
1.8K
14 февраля 2006 года
tapin13
138 / / 17.06.2004
Цитата:
Originally posted by insidex
Тема баян - уже много раз поднималась, умные мужики молчАт, может здесь кто-нибудь посоветует что дельного?

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

Простой вызов system() или exec() только лишь запускает второй скрипт, однако первый продолжает работать,пока второй не выполнит свою задачу и все тут,хоть убей(. Посоветуйте что-нибудь,нужен креатив! THANKS!



crontab

8
14 февраля 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by insidex
Простой вызов system() или exec() только лишь запускает второй скрипт, однако первый продолжает работать,пока второй не выполнит свою задачу и все тут,хоть убей(. Посоветуйте что-нибудь,нужен креатив! THANKS!


А скрипт-то на чём писан?

Вообще, в вопросе имеется противоречие. Кто найдёт - тому пирожок с полки.

2
14 февраля 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by mfender
Вообще, в вопросе имеется противоречие. Кто найдёт - тому пирожок с полки.


ламерство тут, а не противоречие. автор, разберитесь чем system()отличается от exec()
тогда вопросы отпадут сами собой.
подсказка. напишите два perl скрипта:

 
Код:
#!/usr/bin/perl

system("sleep 10");

и
 
Код:
#!/usr/bin/perl

exec("sleep 10");


и запускайте их по очереди в одном терминале, а в другом запустите watch -n 1 ps xf
12K
14 февраля 2006 года
insidex
6 / / 12.10.2005
Эх....ламерство. А что же еще может быть?! PHP по-моему самый "нераскрытый" язык. Его изучаешь буквально по хлебным крошкам,разбросанным по форумам...иначе никак.

Попробывал со слипом на PHP,изините,но скрипт как выполнялся 10 секунд с system(),так и для exec().

Немножко подкорректирую вопрося...

Тобишь запускаю "тяжелый" скрипт обработчик из главного,несколько раз.
Есенно додумался только до вызова команд
system("/usr/local/bin/php -q /patch/to/script-1 > /dev/null &")
system("/usr/local/bin/php -q /patch/to/script-2 > /dev/null &")
*
*
*
system("/usr/local/bin/php -q /patch/to/script-n > /dev/null &")

Моя мечта,чтобы запускать ИХ ПАРАЛЛЕЛЬНО, в разхные потоки,если так угодно.На практике - они выполняются строго последовательно и все тут(

Поэтому и затеял эту дискуссию по поводу system() и exec().
Спасибо за ваше внимание!
2
15 февраля 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by insidex
Попробывал со слипом на PHP,изините,но скрипт как выполнялся 10 секунд с system(),так и для exec().


короче ничего не поняли. system - является комбинацией вызова fork() & exec() при котором порождается дочерний процесс и заменяется тем, что вызывает exec(). при это родительский процесс обязательно ожидает завершения потомка. при exec порождения потомка не происходит. таблица процессов при exec выглядит так:
запускается скрипт

 
Код:
sshd: squirl@pts/0
       \_ -bash
        \_ /usr/bin/perl ./test.pl

заменяется вызовом shell утилиты sleep, по ее завершении - возвращения в скрипт нет:
 
Код:
sshd: squirl@pts/0
      \_ -bash
       \_ sleep 10

т. е. - если мы в скрипте сделаем следующим образом:
 
Код:
#!/usr/bin/perl
sleep 10;                  #1
exec("sleep 10");          #2
sleep 10;                  #3

то строка 3 не отработает.
теперь то же самое, но с system():
 
Код:
sshd: squirl@pts/0
      \_ -bash
       \_ /usr/bin/perl ./test.pl

вот тут появляется третий, дочерний процесс.
 
Код:
sshd: squirl@pts/0
      \_ -bash
       \_ /usr/bin/perl ./test.pl
        \_ sleep 10

тут он отработал и умер, произошел возврат в родительский и третья строчка отработала. только после этого процесс умрет.
 
Код:
sshd: squirl@pts/0
      \_ -bash
       \_ /usr/bin/perl ./test.pl


итак. что нужно вам: использовать exec() в комбинации с fork() явно, но НЕ ожидать (как это делает system()) кончины родителя. т. е. не использовать вызов wait. таким образом вы можете "нарожать" в своем скрипте хоть 50 потомков.

извините за эту мини-лекцию, хотелось хоть немного заставить думать. потому что фраза
Цитата:

PHP по-моему самый "нераскрытый" язык. Его изучаешь буквально по хлебным крошкам,разбросанным по форумам...иначе никак.


меня оч. удивила. по PHP - огромное количество книг и доков. главное не жалеть денег на покупку и времени на поиск. а учить языки по форумам - дурость.

12K
15 февраля 2006 года
insidex
6 / / 12.10.2005
ОБОЖАЮ!!!!

Теперь сам понял,что дурость,ибо некоторые вещи вообще в корне не правильно понял =)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог