2011-02-02 3 views
6

pcntl_forkをWAMPで動作させる方法はありますか?フォークのソリューションを開発し、ローカルでテストする必要があります。WAMPとpcntl_fork

+1

を。そうでなければ、w32api拡張機能を使って手作りのものを手に入れることができます(それがまだ利用可能な場合)。 – mario

答えて

10

いいえ、不可能です。 PCNTL拡張機能には* nixプラットフォームが必要です。

これで、あなたは何をしようとしていますか、フォークせずにそれを解決できますか?

編集:起動するバックグラウンド・プロセスにいくつかの選択肢:

  • のUnix/Linuxの場合:

    exec('nohup php yourscript.php > /dev/null 2>&1 &'); 
    
  • のWindows。引数のドキュメントについては

    $com = new Com('WScript.shell'); 
    $com->run('php yourscript.php', 10, false); 
    

    、以下を参照してくださいhttp://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspx

+1

私は並行プロセスを実行する必要があります。私はcronを使用して実装することができます(そして、DBを使用して実行中のプロセスの数を管理します)。しかし、10個の同時実行プロセスを実行したかったとします.10個のスクリプトをすべて実行するには、特定のスクリプトを10回(1分増分)呼び出す必要があります。私は希望の数の同時スクリプトを取得します)。あるいは、同じスクリプト(foo_1がfooを呼び出す、foo_2がfooなどを呼び出す)を呼び出す「ダミー」関数を持つことができ、cronコールfoo_1、foo_2などを毎分取得できます。 kludgyと思われる。 – StackOverflowNewbie

+1

@Stack:バックグラウンドタスクを起動する方法は複数あります。 linux上で 'nohup'と'& 'を使ってプロセスを切断するか、COM WScriptを使うことができます:http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspxバックグラウンドタスクを起動する... – ircmaxell

+0

@Stack:答えを編集 – ircmaxell

-1

擬似コードをソリューション:

while (TRUE) 
{ 
    $process_limit = get_process_limit(); 
    $process_count = get_process_count(); 

    if process count < process limit: 
    { 
     // get_row returns a row (as an array) from the DB that needs to be processed 
     $row = get_row(); 
     if($row === array()) 
     { 
     // Nothing to process; sleep 
     sleep(2); 
     } 
     else 
     { 
     // Process row 
     process_count(+1); 
     process_row($row); 
     process_count(-1); 
     } 

    } 
    elseif process count === process limit 
    { 
     // Do not add to the process 
     exit; 
    } 
    elseif process count > process limit 
    { 
     // Means the process limit was decreased 
     // Terminate this process instance 
     process_count(-1); 
     exit; 
    } 
} 
-1

これは、既に回答されていますが、私は私の2Pを追加するだろうと思いました。

cygwinを使用してWindowsでphpでpcntl-forkを実行できます。

インストールには本当に苦労しますが、私のようにPHPクリスクリプトを実行したいのであれば、それが最善の策です。

私はhereからの指示だ:あなたはPCNTLが機能する可能性が高いのCygwin、下でそれをコンパイル/実行しようとすることができ