0

在我的 php 脚本中,我生成了一系列要执行的控制台命令。顺序是严格的,因为每个下一个命令都依赖于前一个命令的结果。我用 ';' 命令之间的分隔符。

在正常情况下,我只是 exec() 那个序列,它工作正常。但有时我需要对这个序列进行微调并在后台运行。我读到一个命令可以通过附加 ' > /dev/null &' 在后台运行。但是对于一个序列,我尝试了不同的方法,但无济于事。我觉得 exec() 可能不适合这项工作。

如何才能做到这一点?据我了解,我需要在每个命令前面加上“nice -n 10”。

更新1:

我目前正在使用的代码:

$cmd[] = '...';
//...
$cmd[] = '...';
//...

if($inBackground)
{
    foreach($cmd as &$command)
        $command = 'nice -n 10 '.$command.' > /dev/null ';
}

if($inBackground)
    exec(implode(' ; ', $cmd).' &');
else
    exec(implode(' ; ', $cmd));

更新2:

我使用 mario 的提示更改了代码,现在它可以工作了:

$cmd[] = '...';
//...
$cmd[] = '...';
//..

$command = implode(' ; ', $cmd);
if($inBackground)
    $command = "nice sh -c '".$command."' > /dev/null &";

exec($command);

我确保我的命令正确转义并且不包含单引号。

4

0 回答 0