<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Как отключить чайлда от STDOUT в PHP?</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/5794.html</link>
    <description>Пхп собран как модуль апача под *nix. Есть задачка - запустить чайлдом очень долгий процесс, и чтобы родитель его соотв-но не ждал. Но как отрубить чайлда от STDOUT?? Браузер всёравно ждёт пока чайлд завершится и закроет канал (( &lt;br&gt;Неужели обязательно нужно длинную рутину делать отдельным скриптом и пускать через exec(long.php &amp;gt; /dev/null &amp;gt; 2&amp;gt;&amp;1 &amp;)?&lt;br&gt;&lt;br&gt;</description>

<item>
    <title>Как отключить чайлда от STDOUT в PHP? (mac)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/5794.html#13</link>
    <pubDate>Sun, 08 Jun 2008 17:01:14 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;и если нет данных и текущих заданий засыпает на определенное время. &lt;br&gt;&amp;gt;То есть в режиме бездействия системных ресурсов не жрет. Различные вебскрипты &lt;br&gt;&amp;gt;для выполнения фоновых задач или задач, требующих повышения привилегий, связываются через &lt;br&gt;&amp;gt;сокет с демоном и вызывают ту или иную его функцию. Демон &lt;br&gt;&amp;gt;выполняет поставленную задачу, попутно продолжая проверку сокета на предмет новых соединений. &lt;br&gt;&amp;gt;Если вам нужно вызвать один единственный скрипт, не требующий повышения привилегий, &lt;br&gt;&amp;gt;причем очень редко, то можно обойтись и фоновым запуском, однако если &lt;br&gt;&amp;gt;возможных заданий становится несколько, становится критичным race condition и время выполнения, &lt;br&gt;&amp;gt;появляется нужда в опросе статуса выполнения задания, необходимость в повышении привелегий &lt;br&gt;&amp;gt;итд итп, то вариант с демоном будет значительно удобней. &lt;br&gt;&lt;br&gt;Спасибо, как-то не задумывался над этим. Большое спасибо! Есть смысл сочинить демона на будущее.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Как отключить чайлда от STDOUT в PHP? (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/5794.html#12</link>
    <pubDate>Sun, 08 Jun 2008 04:38:15 GMT</pubDate>
    <description>Объясню подробней. Создается демон, который в цикле слушает сокет при помощи select и если нет данных и текущих заданий засыпает на определенное время. То есть в режиме бездействия системных ресурсов не жрет. Различные вебскрипты для выполнения фоновых задач или задач, требующих повышения привилегий, связываются через сокет с демоном и вызывают ту или иную его функцию. Демон выполняет поставленную задачу, попутно продолжая проверку сокета на предмет новых соединений. Если вам нужно вызвать один единственный скрипт, не требующий повышения привилегий, причем очень редко, то можно обойтись и фоновым запуском, однако если возможных заданий становится несколько, становится критичным race condition и время выполнения, появляется нужда в опросе статуса выполнения задания, необходимость в повышении привелегий итд итп, то вариант с демоном будет значительно удобней. &lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Как отключить чайлда от STDOUT в PHP? (mac)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/5794.html#11</link>
    <pubDate>Sat, 07 Jun 2008 19:31:20 GMT</pubDate>
    <description>&amp;gt;Может лучше запустить демон не из апача и обращаться к нему из &lt;br&gt;&amp;gt;скрипта через сокет с запросами? &lt;br&gt;&lt;br&gt;Из всего вышесказанного делаю вывод что нужно делать exec отдельного скрипта, а обращаться потом к чайлду не нужно, он отработал своё и всё, он вроде как и не совсем демон )).&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Как отключить чайлда от STDOUT в PHP? (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/5794.html#10</link>
    <pubDate>Sat, 07 Jun 2008 17:46:24 GMT</pubDate>
    <description>Может лучше запустить демон не из апача и обращаться к нему из скрипта через сокет с запросами?&lt;br&gt;</description>
</item>

<item>
    <title>Как отключить чайлда от STDOUT в PHP? (mac)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/5794.html#9</link>
    <pubDate>Sat, 07 Jun 2008 11:06:57 GMT</pubDate>
    <description>&amp;gt;хочетсо добавить это есть потенциальный DoS! &lt;br&gt;&amp;gt;буть осторожней &lt;br&gt;&lt;br&gt;Это для админки сайта, такой сценарий маловероятен. Но сенк за предупреждение, всё надо учитывать.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Как отключить чайлда от STDOUT в PHP? (Pahanivo)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/5794.html#8</link>
    <pubDate>Sat, 07 Jun 2008 10:36:58 GMT</pubDate>
    <description>хочетсо добавить это есть потенциальный DoS!&lt;br&gt;буть осторожней&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Как отключить чайлда от STDOUT в PHP? (mac)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/5794.html#7</link>
    <pubDate>Sat, 07 Jun 2008 08:22:37 GMT</pubDate>
    <description>&amp;gt;Обычно происходит так: браузер ждет окончания данных от веб-сервера, веб-сервер ждет завершения &lt;br&gt;&amp;gt;скрипта-родителя, родитель ждет завершения потомка. Если же надо отвязать потомка от &lt;br&gt;&amp;gt;родителя, то есть произвести демонизацию, то следует в потомке закрыть дескрипторы &lt;br&gt;&amp;gt;стандартного ввода/вывода(STDIN, STDOUT,STDERR они же 0,1,2) и вызвать setsid для отвязывания &lt;br&gt;&amp;gt;от терминала(и родителя). Есть ли в php такие возможности я не &lt;br&gt;&amp;gt;в курсе. Более подробно о демонизации можно глянуть, например, здесь http://www.enderunix.org/documents/eng/daemon.php &lt;br&gt;&amp;gt;ну или гугл поспрашивать. &lt;br&gt;&lt;br&gt;Спасибо за инфу, действительно в обычном случае (cgi) так и есть и оно работает. А тут закрыть STDOUT не получается. Наверное всётаки нужно делать чайлдовую рутину отдельным скриптом и пускать через exec(&quot;nohup ...&quot;), чтоб апач не форкался. А жаль, удобнее было б всё в одном скрипте иметь.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Как отключить чайлда от STDOUT в PHP? (GD)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/5794.html#6</link>
    <pubDate>Sat, 07 Jun 2008 04:55:37 GMT</pubDate>
    <description>&amp;gt;Обычно происходит так: браузер ждет окончания данных от веб-сервера, веб-сервер ждет завершения &lt;br&gt;&amp;gt;скрипта-родителя, родитель ждет завершения потомка. Если же надо отвязать потомка от &lt;br&gt;&amp;gt;родителя, то есть произвести демонизацию, то следует в потомке закрыть дескрипторы &lt;br&gt;&amp;gt;стандартного ввода/вывода(STDIN, STDOUT,STDERR они же 0,1,2) и вызвать setsid для отвязывания &lt;br&gt;&amp;gt;от терминала(и родителя). Есть ли в php такие возможности я не &lt;br&gt;&amp;gt;в курсе. Более подробно о демонизации можно глянуть, например, здесь http://www.enderunix.org/documents/eng/daemon.php &lt;br&gt;&amp;gt;ну или гугл поспрашивать. &lt;br&gt;&lt;br&gt;осталось понять как отвязать апач от апача&lt;br&gt;(мы же обсуждаем apache+mod_php)&lt;br&gt;</description>
</item>

<item>
    <title>Как отключить чайлда от STDOUT в PHP? (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/5794.html#5</link>
    <pubDate>Sat, 07 Jun 2008 02:19:17 GMT</pubDate>
    <description>Обычно происходит так: браузер ждет окончания данных от веб-сервера, веб-сервер ждет завершения скрипта-родителя, родитель ждет завершения потомка. Если же надо отвязать потомка от родителя, то есть произвести демонизацию, то следует в потомке закрыть дескрипторы стандартного ввода/вывода(STDIN, STDOUT,STDERR они же 0,1,2) и вызвать setsid для отвязывания от терминала(и родителя). Есть ли в php такие возможности я не в курсе. Более подробно о демонизации можно глянуть, например, здесь http://www.enderunix.org/documents/eng/daemon.php ну или гугл поспрашивать. &lt;br&gt;</description>
</item>

</channel>
</rss>
