1

我有以下 2 个文件并在 linux (debian) 上执行它们。

文件1.php

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

文件2.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

我没有过多地研究它,但我的第一个猜测是从 file1 分叉它。

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

稍后我可以更好地查看,但您应该能够使用 pcntl_waitpid($pid) 来完成分叉。

于 2011-01-13T15:55:31.123 回答
0

popen 和 proc_open 似乎做到了:)

文件1.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);

文件2.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 回答