Php在后台执行一系列外部niced linux命令

Php在后台执行一系列外部niced linux命令,php,linux,exec,background-process,nice,Php,Linux,Exec,Background Process,Nice,在我的php脚本中,我生成了一系列要执行的控制台命令。顺序是严格的,因为下一个命令依赖于上一个命令的结果。我用“;”命令之间的分隔符 在正常情况下,我只是执行这个序列,它工作得很好。但有时我需要这个序列在后台运行。我了解到一个命令可以在后台运行,方法是在它后面附加'>/dev/null&'。但在一个序列中,我尝试了不同的方法,但没有效果。我觉得exec()可能不是适合这个工作的函数 如何做到这一点?据我所知,我需要在每个命令前面加上'nice-n10' 更新1: 我当前使用的代码: $cmd[]

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

在正常情况下,我只是执行这个序列,它工作得很好。但有时我需要这个序列在后台运行。我了解到一个命令可以在后台运行,方法是在它后面附加'>/dev/null&'。但在一个序列中,我尝试了不同的方法,但没有效果。我觉得exec()可能不是适合这个工作的函数

如何做到这一点?据我所知,我需要在每个命令前面加上'nice-n10'

更新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);

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

目前的确切问题是什么?不工作太模糊序列无法执行请添加当前使用的PHP代码您可以使用整个子shell,让它按照
nice sh-c'cmd1的顺序执行命令;cmd2;cmd3'
。请注意,您需要在这些单引号中进行适当的转义(escapeshellarg)。