pcntl_forkをWAMPで動作させる方法はありますか?フォークのソリューションを開発し、ローカルでテストする必要があります。WAMPとpcntl_fork
答えて
いいえ、不可能です。 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
私は並行プロセスを実行する必要があります。私はcronを使用して実装することができます(そして、DBを使用して実行中のプロセスの数を管理します)。しかし、10個の同時実行プロセスを実行したかったとします.10個のスクリプトをすべて実行するには、特定のスクリプトを10回(1分増分)呼び出す必要があります。私は希望の数の同時スクリプトを取得します)。あるいは、同じスクリプト(foo_1がfooを呼び出す、foo_2がfooなどを呼び出す)を呼び出す「ダミー」関数を持つことができ、cronコールfoo_1、foo_2などを毎分取得できます。 kludgyと思われる。 – StackOverflowNewbie
@Stack:バックグラウンドタスクを起動する方法は複数あります。 linux上で 'nohup'と'& 'を使ってプロセスを切断するか、COM WScriptを使うことができます:http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspxバックグラウンドタスクを起動する... – ircmaxell
@Stack:答えを編集 – ircmaxell
擬似コードをソリューション:
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;
}
}
これは、既に回答されていますが、私は私の2Pを追加するだろうと思いました。
cygwinを使用してWindowsでphpでpcntl-forkを実行できます。
インストールには本当に苦労しますが、私のようにPHPクリスクリプトを実行したいのであれば、それが最善の策です。
私はhereからの指示だ:あなたはPCNTLが機能する可能性が高いのCygwin、下でそれをコンパイル/実行しようとすることができ
を。そうでなければ、w32api拡張機能を使って手作りのものを手に入れることができます(それがまだ利用可能な場合)。 – mario