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

Ваш аккаунт

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

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

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

system, exec вывод в файл

346
15 ноября 2007 года
Новая папка
256 / / 24.12.2004
Вот везде в мануалах написано такое примечание для функций запуска внешних программ:
Цитата:
Примечание: Если ваша программа начинается с выполнения этой функции и хотите оставить её работать в фоновом режиме, вы должны убедиться, что вывод этой программы будет направлен в файл или в какой-нибудь другой поток вывода, иначе PHP зависнет, пока выполнение программы не
закончится.



Я направляю вывод в файл, но php все равно ждёт окончания выполнения. Может я что-то не так делаю?

 
Код:
system('path_to_program > path_to_output_file');


Вывод сохраняется в файл, но пхп подвисает :(
256
15 ноября 2007 года
foxweb
1.0K / / 27.07.2005
так оно и должно быть. мне сложно представить, чтоб PHP запускал программы фоном, так как в нём не предсмотрено средств распараллеливания. потому они и называются скриптами - программа выполняется последовательно строчка за строчкой и плодить нити/процессы PHP не умеет.

но можно попробовать

 
Код:
system('bg path_to_program > path_to_output_file');
или

bg pid
где pid - номер запущенного процесса


Линукса щас под рукой нет, посмотреть не могу...
346
15 ноября 2007 года
Новая папка
256 / / 24.12.2004
Цитата: foxweb
так оно и должно быть. мне сложно представить, чтоб PHP запускал программы фоном, так как в нём не предсмотрено средств распараллеливания. потому они и называются скриптами - программа выполняется последовательно строчка за строчкой и плодить нити/процессы PHP не умеет.

но можно попробовать

 
Код:
system('bg path_to_program > path_to_output_file');
или

bg pid
где pid - номер запущенного процесса


Линукса щас под рукой нет, посмотреть не могу...




А я под виндой :)

12
15 ноября 2007 года
alekciy
3.0K / / 13.12.2005
Хм... kill процесса по PID-у организовать можно, процесс умрет, а вот закончиться ли отработка скрипта... даже любопытно :)
12
15 ноября 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: Новая папка
А я под виндой :)


А какая разница? Действия можно выполнить теже самые, просто не всегда такими же командами.

256
15 ноября 2007 года
foxweb
1.0K / / 27.07.2005
Цитата: Новая папка
А я под виндой :)



Когда же люди наконец поймут, что винда - не та операционная система, чтоб сайты держать и такой "сложный" софт гонять :)

346
15 ноября 2007 года
Новая папка
256 / / 24.12.2004
Цитата: foxweb
Когда же люди наконец поймут, что винда - не та операционная система, чтоб сайты держать и такой "сложный" софт гонять :)



1) "Линукса щас под рукой нет, посмотреть не могу..." -> "А я под виндой :)"

2) Софтина разрабатывается для моей локальной машины, и она не является сервером, на котором держат сайты

Тогда такой вопрос. Внешняя программа должна работать не больше 10 секунд. Как я могу запустить и прервать с помощью пхп?
Можно сделать так $proc = popen($command, "r"). Но как мне его прервать? ведь оно опять виснет

346
15 ноября 2007 года
Новая папка
256 / / 24.12.2004
Сам разобрался.
Будет два скрипта. Один запускает процесс, а второй - убивает.
Команды такие
 
Код:
system('my_ext_programm > my_file');

...

system('taskkill /F /IM my_ext_programm_file_name');


Только нужно придумать какое-то взаимодействие между этими файлами, и как-то их запускать периодически (типа крона), или запустить один раз и со слипами гонять до победного конца.
12
15 ноября 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: Новая папка

Только нужно придумать какое-то взаимодействие между этими файлами,


Если тебе нужна синхронизация между файла и что один файл мог дергать/запускать_по_событию другой, то в первой файле вызывай запуск второго через file_get_contents() к примеру. По крайней мере я обычно так управляю одним скриптом из другого.

346
16 ноября 2007 года
Новая папка
256 / / 24.12.2004
Цитата: alekciy
Если тебе нужна синхронизация между файла и что один файл мог дергать/запускать_по_событию другой, то в первой файле вызывай запуск второго через file_get_contents() к примеру. По крайней мере я обычно так управляю одним скриптом из другого.



Это все мелочи ;) Главное изюминка! А реализация на заднем фоне

2
18 ноября 2007 года
squirL
5.6K / / 13.08.2003
Цитата:
мне сложно представить, чтоб PHP запускал программы фоном, так как в нём не предсмотрено средств распараллеливания. потому они и называются скриптами - программа выполняется последовательно строчка за строчкой и плодить нити/процессы PHP не умеет.


бггг... т. е. реализации fork & exec в пехапе нету? ага? не верю. и нити он должен уметь.

проблема автора - в непонимании того, что есть system. ожидать окончания выполнения внешней программы программа инициирующая запуск будет до тех пор, пока не произойдет возврата из этой самой запущенной программы. пофигу - куда направлен STDOUT.
далее - в поиск по форуму. я уже раз 10 писал, чем отличается system и exec.
вкратце - тебе надо самостоятельно реализовать system (ЕМНИП, system=fork+exec+wait/waitpid) но без ожидания возврата. т. е. - родитель форкает потомка, отпускает его в самостоятельное плавание, а сам работает дальше. если есть вероятность, что он завершить раньше потомка - делать потомок демоном.

346
19 ноября 2007 года
Новая папка
256 / / 24.12.2004
Цитата: squirL
бггг... т. е. реализации fork & exec в пехапе нету? ага? не верю. и нити он должен уметь.

проблема автора - в непонимании того, что есть system. ожидать окончания выполнения внешней программы программа инициирующая запуск будет до тех пор, пока не произойдет возврата из этой самой запущенной программы. пофигу - куда направлен STDOUT.
далее - в поиск по форуму. я уже раз 10 писал, чем отличается system и exec.
вкратце - тебе надо самостоятельно реализовать system (ЕМНИП, system=fork+exec+wait/waitpid) но без ожидания возврата. т. е. - родитель форкает потомка, отпускает его в самостоятельное плавание, а сам работает дальше. если есть вероятность, что он завершить раньше потомка - делать потомок демоном.



Та уже давно сделал, отписался и забыл.
И не нужно мне писать "проблема автора - в непонимании того, что есть system.", я привёл цитату с мануала, и хотел знать правда ли это. Если да - то зачем извращаться, если нет - буду что-то думать, что я и сделал за несколько дней до Вашего поста.
И чем отличается system от exec я, вроде, тоже не спрашивал.
Отвечайте на конкретные вопросы или вообще ничего не пишите.

12
19 ноября 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: Новая папка

И чем отличается system от exec я, вроде, тоже не спрашивал.
Отвечайте на конкретные вопросы или вообще ничего не пишите.


:D
Ой как невежливо... Пишет то тебе не новичок, очень может быть, что его совет будет тебе полезным, а ты сразу "ни чё не пишите"...нехорошо.

2
19 ноября 2007 года
squirL
5.6K / / 13.08.2003
Цитата: Новая папка

Отвечайте на конкретные вопросы или вообще ничего не пишите.


я ответил на вопрос целиком и полностью. и указал что следует изучить, чтобы проблемы больше не возникало. читайте внимательно, юноша и не хамите.

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