filehandle — php proc_open — сохранить дескриптор процесса в файл и получить его

Я использую следующий код, чтобы открыть процесс с помощью proc_open и сохранить дескриптор и каналы в файл:

    $command = "COMMAND_TO_EXECUTE";

$descriptors = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("file", "error-output.txt", "a")  // stderr is a file to write to
);


$pipes = array();

$processHandle = proc_open($command, $descriptors, $pipes);

if (is_resource($processHandle)) {

$processToSave = array(
"process" => $processHandle,
"pipes" => $pipes
);

file_put_contents("myfile.bin", serialize($processToSave) );

}

И через секунду мне нужно извлечь этот дескриптор файла из файла, я использовал этот код:

$processArray = unserialize(file_get_contents("myfile.bin"));
$processHandle = $processArray["process"];
$pipes = $processArray["pipes"];

Но когда я печатаю var_dump из $ processHandle и $ pipe после извлечения из файла, я получаю целые числа вместо ресурса или процесса, но почему ??

 var_dump($processHandle) ->  int(0)
var_dump($pipes) - > array(2) { int(0), int(0) }

И в этот момент, конечно, если я попытаюсь закрыть каналы, я получу ошибку, ожидаемый ресурс, заданное целое число.

Как я могу заставить это работать? (ПРИМЕЧАНИЕ: это решение, которое я ищу)

Но в качестве альтернативы я могу также получить pid процесса и затем использовать этот pid, чтобы остановить или уничтожить или сделать что-то еще с процессом, но как насчет каналов?
Как я могу прочитать / записать или сохранить ошибку из / в процесс?

Спасибо

1

Решение

Нашел решение для себя, что невозможно сериализовать ресурс, и когда скрипт закончил, обработчик ресурса был свободен.

Решением было создание демона, прослушивающего порт, который по запросу запускает и останавливает процесс. Поскольку процесс всегда выполняется, он может вести список процессов-обработчиков и останавливаться по запросу.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]