Разделение на потоки
Нужно из одного скрипта запустить в background другой скрипт,но не ждать в первом,пока второй скрипт выполниться,покрайне мере чтобы выглядело это так.
Простой вызов system() или exec() только лишь запускает второй скрипт, однако первый продолжает работать,пока второй не выполнит свою задачу и все тут,хоть убей(. Посоветуйте что-нибудь,нужен креатив! THANKS!
Тема баян - уже много раз поднималась, умные мужики молчАт, может здесь кто-нибудь посоветует что дельного?
Нужно из одного скрипта запустить в background другой скрипт,но не ждать в первом,пока второй скрипт выполниться,покрайне мере чтобы выглядело это так.
Простой вызов system() или exec() только лишь запускает второй скрипт, однако первый продолжает работать,пока второй не выполнит свою задачу и все тут,хоть убей(. Посоветуйте что-нибудь,нужен креатив! THANKS!
crontab
Простой вызов system() или exec() только лишь запускает второй скрипт, однако первый продолжает работать,пока второй не выполнит свою задачу и все тут,хоть убей(. Посоветуйте что-нибудь,нужен креатив! THANKS!
А скрипт-то на чём писан?
Вообще, в вопросе имеется противоречие. Кто найдёт - тому пирожок с полки.
Вообще, в вопросе имеется противоречие. Кто найдёт - тому пирожок с полки.
ламерство тут, а не противоречие. автор, разберитесь чем system()отличается от exec()
тогда вопросы отпадут сами собой.
подсказка. напишите два perl скрипта:
system("sleep 10");
и
exec("sleep 10");
и запускайте их по очереди в одном терминале, а в другом запустите watch -n 1 ps xf
Попробывал со слипом на 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().
Спасибо за ваше внимание!
Попробывал со слипом на PHP,изините,но скрипт как выполнялся 10 секунд с system(),так и для exec().
короче ничего не поняли. system - является комбинацией вызова fork() & exec() при котором порождается дочерний процесс и заменяется тем, что вызывает exec(). при это родительский процесс обязательно ожидает завершения потомка. при exec порождения потомка не происходит. таблица процессов при exec выглядит так:
запускается скрипт
\_ -bash
\_ /usr/bin/perl ./test.pl
заменяется вызовом shell утилиты sleep, по ее завершении - возвращения в скрипт нет:
\_ -bash
\_ sleep 10
т. е. - если мы в скрипте сделаем следующим образом:
sleep 10; #1
exec("sleep 10"); #2
sleep 10; #3
то строка 3 не отработает.
теперь то же самое, но с system():
\_ -bash
\_ /usr/bin/perl ./test.pl
вот тут появляется третий, дочерний процесс.
\_ -bash
\_ /usr/bin/perl ./test.pl
\_ sleep 10
тут он отработал и умер, произошел возврат в родительский и третья строчка отработала. только после этого процесс умрет.
\_ -bash
\_ /usr/bin/perl ./test.pl
итак. что нужно вам: использовать exec() в комбинации с fork() явно, но НЕ ожидать (как это делает system()) кончины родителя. т. е. не использовать вызов wait. таким образом вы можете "нарожать" в своем скрипте хоть 50 потомков.
извините за эту мини-лекцию, хотелось хоть немного заставить думать. потому что фраза
PHP по-моему самый "нераскрытый" язык. Его изучаешь буквально по хлебным крошкам,разбросанным по форумам...иначе никак.
меня оч. удивила. по PHP - огромное количество книг и доков. главное не жалеть денег на покупку и времени на поиск. а учить языки по форумам - дурость.
Теперь сам понял,что дурость,ибо некоторые вещи вообще в корне не правильно понял =)