PHP执行命令作为子命令
问题描述:
我有以下2个文件,并在linux(debian)上执行它们。PHP执行命令作为子命令
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
答
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";
答
include('file2.php');
它应该立即执行命令
答
我还没有看太多,但我的第一个猜测是将它从file1分叉。
http://php.net/manual/en/function.pcntl-fork.php
我以后可以采取更好看,但你应该能够使用pcntl_waitpid($ PID)为叉来完成。
那不是我要求所有..请再读一遍! – Thomaschaaf 2011-01-13 15:44:51