execute multiple programs

Solid

Drosera anglica
execute multiple programs

Столкнулся с проблеммой. Требуется запустить несколько программ одновременно, и дальше проверять их на завершение и выводить, впроцессе работы программы, полученный текст консольного приложения (из тех программ, что были запущены).
Использование сторонних расширений не приветствуется, по этому http://ee2.php.net/manual/en/ref.pcntl.php просьба не предлагать.
Желательно что бы работало как в win, так и в nix.
Ни одна из стандартных функций:
system()
passthru()
shell_exec()
proc_open()
совершить то, чего я добиваюсь - не даёт.
Надеюсь на вас.
 

Сергей Тарасов

Профессор
Re: execute multiple programs

Автор оригинала: Solid
Желательно что бы работало как в win, так и в nix.
Ни одна из стандартных функций:
system()
passthru()
shell_exec()
proc_open()
совершить то, чего я добиваюсь - не даёт.
Надеюсь на вас.
Как так??? Вообще-то
1. Это им по силам
2. Эти функции - все, что у тебя есть, больше ничего

Есть еще PCNTL(Process Control Functions)
pcntl_fork
pcntl_exec

Но они только под Unix
 

Solid

Drosera anglica
Re: Re: execute multiple programs

Автор оригинала: Сергей Тарасов
Как так??? Вообще-то
1. Это им по силам
2. Эти функции - все, что у тебя есть, больше ничего

Есть еще PCNTL(Process Control Functions)
pcntl_fork
pcntl_exec

Но они только под Unix
Тогда объясните пожалуйста, как запустить и дальше только получать данные, проверять на return 1?
system("prog"); - ждёт пока программа завершит свою операцию
так же и с exec.
с proc_open и passthru - та же самая история.
 

Сергей Тарасов

Профессор
Запустить и не ждать окончания выполнения?

Не буду врать насчет Windows но в Unix хорошим решением является запустить процесс в бэкграунд и отключить от потоков ввода/вывода.

./prog 2>/dev/null >&- <&- >/dev/null &

По поводу обмена данными... Это уже другая история. Неплохим кроссплатформенным решением является синхронизация через БД.

В Unix есть сигналы и семафоры. Но тут нужно быть уверенным что:
1. PHP собран с поддержкой этих функций
2. Ядро собрано с поддержкой этих функций (например, FreeBSD в стандартной сборке не поддерживает семафоры)

-~{}~ 05.03.06 14:39:

PS. Вывод программ (консольный) можно перенаправить в файл.
 
Сверху