Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: fork под windows
 
 автор: SHAman   (20.11.2009 в 13:08)   письмо автору
 
 

Есть ли возможность форкать процессы под виндой?

  Ответить  
 
 автор: cheops   (20.11.2009 в 13:41)   письмо автору
 
   для: SHAman   (20.11.2009 в 13:08)
 

Вообще Windows немного по другому архитектурно устроена... Скорее даже удобнее, так как вы напрямую можете манипулировать нитями и потоками.

У вас какая задача? Что хотите сделать?

  Ответить  
 
 автор: SHAman   (20.11.2009 в 17:54)   письмо автору
 
   для: cheops   (20.11.2009 в 13:41)
 

Я понимаю, что виндоус сама по себе не поддерживает форк.

Принимал лабораторную. Товарищ сделал сервер на пхп. Задача включает, естественно, выделение детеныша процесса на каждого клиента. В задании оговорено, что нужно делать форк. Тыкнулись - оказывается, это не так просто.

То есть, задача, в итоге, сводится к осуществлению форка в виндоусе. Именно форк, именно пхп, именно виндоус. Реально?

  Ответить  
 
 автор: heed   (20.11.2009 в 23:31)   письмо автору
 
   для: 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, ...."

  Ответить  
 
 автор: cheops   (21.11.2009 в 12:24)   письмо автору
 
   для: SHAman   (20.11.2009 в 17:54)
 

Можно обертку написать, но это действительно нужно использовать API-функции, на PHP лучше с этим не связываться, расширения, которые это позволяют достаточно кривоватые.

  Ответить  
 
 автор: SHAman   (24.11.2009 в 15:02)   письмо автору
 
   для: 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; 


Ну вдруг кому пригодится.

  Ответить  
 
 автор: ghost404   (07.08.2014 в 13:26)   письмо автору
 
   для: 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 &');
    }
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования