在我的php脚本中,我生成一系列要执行的控制台命令。序列是严格的,因为每个next命令都依赖于前一个命令的结果。我用 ';'命令之间的分隔符。
在正常情况下我只是exec()那个序列,它工作正常。但有时候我需要将这个序列定位并在后台运行。我读到可以通过附加'>在后台运行一个命令/ dev / null&'它。但是通过一个序列,我尝试了不同的方法但无济于事。我觉得exec()可能不适合这项工作。
如何做到这一点?据我所知,我需要在每个命令前加上'nice -n 10'。
UPDATE1:
我目前正在使用的代码:
$cmd[] = '...';
//...
$cmd[] = '...';
//...
if($inBackground)
{
foreach($cmd as &$command)
$command = 'nice -n 10 '.$command.' > /dev/null ';
}
if($inBackground)
exec(implode(' ; ', $cmd).' &');
else
exec(implode(' ; ', $cmd));
UPDATE2:
我使用马里奥的提示更改了代码,现在它可以正常工作:
$cmd[] = '...';
//...
$cmd[] = '...';
//..
$command = implode(' ; ', $cmd);
if($inBackground)
$command = "nice sh -c '".$command."' > /dev/null &";
exec($command);
我确保我的命令已正确转义且不包含单引号。