1

次の2つのファイルがあり、Linux(debian)で実行しています。

File1.php

<?php
exec("php -f file2.php > /dev/null 2>&1 &");
sleep(100);

File2.php

<?php
exec("sleep 30 > /dev/null 2>&1 &");
exec("sleep 30 > /dev/null 2>&1 &");
sleep(100);

現在の方法では、最初に file1.php を開始し、file2.php を起動して、すぐにスリープ コマンドを開始します。最初のスリープが終了するのを待たずに続行します。

問題は、file2.php と sleep コマンドが file1.php のサブコマンドではないことです。すべてのサブコマンドを強制終了するために単純に強制終了することはできません。私の htop は次のようになります: http://dl.getdropbox.com/u/5910/Jing/2011-01-13_1611.png

コマンドをfile1.phpのサブコマンドにする方法を探しているので、それらをすべて簡単に殺すことができます:)

私が持っているもの:

'- php -f file2.php
'-sleep 30
'-sleep 30
'- php -f file1.php

基本的に私はこれが欲しい:

'- php -f file1.php
  '- php -f file2.php
    '-sleep 30
    '-sleep 30
4

2 に答える 2

0

popenとproc_openはそれをしているようです:)

file1.php

<?php
$descs = array(
   0 => array("pipe", "r"),
   1 => array("pipe", "w"),
   2 => array("file", "/tmp/error-output.txt", "a")
);
$process = proc_open("php -f file2.php", $descs, $pipess);
sleep(100);

file2.php

<?php
$desc = array(
   0 => array("pipe", "r"),
   1 => array("pipe", "w"),
   2 => array("file", "/tmp/error-output.txt", "a")
);
echo "asd";
$process[] = proc_open("sleep 12", $desc, $pipes);
echo "sleep!";
$process[] = proc_open("sleep 10", $desc, $pipes);
echo "asd";
于 2011-01-13T17:13:12.320 に答える
0

あまり詳しく調べていませんが、最初の推測では、file1 からフォークすることです。

http://php.net/manual/en/function.pcntl-fork.php

後で詳しく調べることができますが、フォークを完了するには pcntl_waitpid($pid) を使用できるはずです。

于 2011-01-13T15:55:31.123 に答える