PHP выполнить команду как подкоманду - PullRequest
1 голос
/ 13 января 2011

У меня есть следующие 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

Ответы [ 3 ]

0 голосов
/ 13 января 2011

Я не слишком разбирался в этом, но мое первое предположение состояло бы в том, чтобы разветвлять его из файла 1.

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

Я могу взглянуть попозже, но выдолжен иметь возможность использовать pcntl_waitpid ($ pid) для завершения форка.

0 голосов
/ 13 января 2011

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";
0 голосов
/ 13 января 2011

include('file2.php');

он должен выполнять команды сразу

...