|
|
|
| Есть ли возможность форкать процессы под виндой? | |
|
|
|
|
|
|
|
для: SHAman
(20.11.2009 в 13:08)
| | Вообще Windows немного по другому архитектурно устроена... Скорее даже удобнее, так как вы напрямую можете манипулировать нитями и потоками.
У вас какая задача? Что хотите сделать? | |
|
|
|
|
|
|
|
для: cheops
(20.11.2009 в 13:41)
| | Я понимаю, что виндоус сама по себе не поддерживает форк.
Принимал лабораторную. Товарищ сделал сервер на пхп. Задача включает, естественно, выделение детеныша процесса на каждого клиента. В задании оговорено, что нужно делать форк. Тыкнулись - оказывается, это не так просто.
То есть, задача, в итоге, сводится к осуществлению форка в виндоусе. Именно форк, именно пхп, именно виндоус. Реально? | |
|
|
|
|
|
|
|
для: SHAman
(20.11.2009 в 17:54)
| | В виндовс похожее делают при помощи API-шной CreateProcess() в perl вроде именно она используется для эмуляции fork() , Не смог в исходниках найти как это доказать ,)
, но на php не получится сделать что-то вроде
http://art.firebook.ru/admin/text/perl_3.html
Если только Apache попробовать заставить вызвать чего-нибудь паралельно какими-нибудь virtual().
// Вообще-то есть шанс дёрнуть из пхп при помощи exec() любую апишную функцию , используя комманду типа "RunDll kernel32 CreateProsessA, ...." | |
|
|
|
|
|
|
|
для: SHAman
(20.11.2009 в 17:54)
| | Можно обертку написать, но это действительно нужно использовать API-функции, на PHP лучше с этим не связываться, расширения, которые это позволяют достаточно кривоватые. | |
|
|
|
|
|
|
|
для: cheops
(21.11.2009 в 12:24)
| | Спасибо.
Сам нашел еще это
http://technet.microsoft.com/ru-ru/sysinternals/bb897553.aspx
и это
function run_in_bg($cmd, $winStyle = 0, $waitOnReturn = false)
{
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run($cmd, $winStyle, $waitOnReturn);
$WshShell->Release();
return $oExec;
}
|
Ну вдруг кому пригодится. | |
|
|
|
|
|
|
|
для: SHAman
(24.11.2009 в 15:02)
| | это только запуск cli команды в фоне, а форк процесса это совсем другое
а по поводу запуска cli, вот кроссплатформенное решение
function run_in_bg($cmd)
{
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
pclose(popen('start /b '.$cmd.' >nul 2>&1', 'r'));
} else {
exec($cmd.' >/dev/null 2>&1 &');
}
}
|
| |
|
|
|