Я предполагаю, что то, что вы пытаетесь сделать, напрямую невозможно. Благодаря фоновому процессу вы позволяете своему сценарию PHP продолжаться (и, возможно, завершаться) до того, как результат будет достигнут.
Обходной путь - создать второй скрипт PHP (или Bash / etc), который просто выполняет команду и записывает результат во временный файл.
Основной скрипт будет выглядеть примерно так:
$resultFile = '/tmp/result001';
touch($resultFile);
exec('php command_runner.php '.escapeshellarg($resultFile).' > /dev/null 2>&1 &');
// do other stuff...
// Sometime later when you want to check the result...
while (!strlen(file_get_contents($resultFile))) {
sleep(5);
}
$result = intval(file_get_contents($resultFile));
unlink($resultFile);
И command_runner.php
будет выглядеть так:
$outputFile = $argv[0];
exec('badcommand > /dev/null 2>&1', $output, $result);
file_put_contents($outputFile, $result);
Это не красиво, и, безусловно, есть место для повышения надежности и обработки одновременных выполнений, но общая идея должна работать.