PHP执行命令作为子命令

时间:2011-01-13 15:42:26

标签: execute shellexecute php

我有以下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并立即启动sleep命令。它不会等待第一次睡眠完成继续。

问题是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

3 个答案:

答案 0 :(得分:0)

我没有太多关注,但我的第一个猜测就是从file1分叉。

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

我可以稍后再看一下,但你应该能够使用pcntl_waitpid($ pid)来完成分叉。

答案 1 :(得分: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";

答案 2 :(得分:-1)

include('file2.php');

它应该立即执行命令