The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Предварительный выпуск проекта PXP, развивающего расширенный диалект языка PHP"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Для слежения за появлением новых сообщений в нити, нажмите "Проследить за развитием треда".
. "Предварительный выпуск проекта PXP, развивающего расширенный..." +1 +/
Сообщение от Аноним (106), 22-Май-23, 14:22 
> https://www.php.net/manual/ru/function.pcntl-fork.php
> Я не понял как это использовать и что мне это даёт.

У вас была жалоба на отсутствие многопоточности в пхп, ну так это оно и есть. А нужно оно вам или нет - мне-то откуда знать? Вроде ещё треды есть, но там совсем как-то сложно, имхо.

> и по окончании или завершился сразу, не завершая при этом асинхронные процессы

С таким описанием вам нужен просто exec. Только зачем вам тогда pgrep, kill и всё остальное?...

> С proc_open() не разобрался показалось слишком сложной и не понятно что такое pipe-ы

Пайпы - это потоки STDIN, STDOUT и STDERR для запущенного процесса.

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

Если вам не нужно общаться с этим процессом, то и не работайте с этими пайпами, просто закройте их перед вызовом proc_close. Или вместо пайпов передайте константы [STDIN, STDOUT, STDOUT] - тогда и закрывать ничего не нужно будет. По вашей ссылке все примеры есть.

> а получить я от него хочу только pid или код возврата,

Ну вот тот же PID и можно получить через пайп:

php -r '$res=proc_open("php -r \"echo getmypid(), \\\"\n\\\"; sleep(15);\"", array(["pipe","r"], ["pipe","w"], ["pipe","w"]), $p); echo implode("\n",proc_get_status($res)), "\n\n"; echo fread($p[1], 10);';

> С proc_get_status($res) мне в конце скрипта в бесконечном цикле с секундной задержкой каждый запущенный процесс опрашивать что ли нужно перед выходом, чтобы получить код возврата?

А как вы это сейчас делаете с pgrep? Да, только так. Если через форк делать, то есть ещё pcntl_wait. Но судя по вашему 'kill -9' - дочерние процессы вам нужно прибивать принудительно, а значит wait вам не подойдёт.

> Иначе $res я потеряю же после выхода?

После выхода чего? При завершении родительского процесса? - Да, потеряете. Но тогда это уже и не мультипоточность, а просто запускалка процессов. Тогда вам опять же нужен exec, а не вот это вот всё.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Предварительный выпуск проекта PXP, развивающего расширенный диалект языка PHP, opennews, 16-Май-23, 18:36  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру