2016-08-22 29 views
0

正在检查下面的命令是否正在运行,因此如果第二个用户不能执行它,直到它完成,它将与2个用户一起工作,但如果有3个用户执行它,第一个执行完毕,第二个和第三个用户同时执行它,所以执行“ps axf”后,我找到了2个用户的2个命令,解决方案是什么?检查一个命令是否正在多用户进程中运行php

do { 
$ps = shell_exec("ps axf"); 
$res = preg_match("#/usr/bin/php /var/www/html/checker/checker.php $time#",$ps); 
usleep(100000); 
} while ($res); 

$res = shell_exec("/usr/bin/php /var/www/html/checker/checker.php $time"); 
+3

这是非常不可靠。有** NO **保证,一个用户不能在执行'ps'检查和'exec'脚本之间的时间间隔内将脚本启动到另一个用户的后面。使用锁定文件。这就是他们所设计的。 http://php.net/flock –

+0

@MarcB感谢兄弟的工作:D – Devilion

回答

0
$psCommand = "ps -eo pid,lstart,etime,args | grep 'filepath' | grep 'user' | grep -v /bin/sh | grep -v grep"; 

$command = exec($psCommand, $output); 

foreach ($output as $arrayValue) { 
    echo $output; 
} 
+0

虽然这段代码可能有助于解决问题,但它并不能解释为什么和/或它如何回答问题。提供这种附加背景将显着提高其长期价值。请编辑您的答案以添加解释,包括适用的限制和假设。 – jmattheis

相关问题