【问题标题】:checking if a command is running in process with multi users php检查命令是否在多用户php的进程中运行
【发布时间】:2016-08-22 14:27:28
【问题描述】:

我正在检查以下命令是否正在运行,所以如果为真,则第二个用户在完成之前无法执行它,它与 2 个用户一起工作,但如果 3 个用户执行它,第一个用户将被执行并在它之后执行完成后,第二个和第三个用户同时执行,所以执行“ps axf”后,我发现2个用户的2个命令,解决办法是什么?

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");

【问题讨论】:

  • 这非常不可靠。 NO 保证在执行 ps 检查和 exec'ing 脚本之间的时间间隔内,一个用户不能在另一个用户的背后启动您的脚本。使用锁定文件。这就是他们的设计目的。 php.net/flock
  • @MarcB 谢谢兄弟它的工作:D

标签: php linux shell command-line


【解决方案1】:
$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;
}

【讨论】:

  • 虽然这段代码可能有助于解决问题,但它并没有解释为什么和/或如何回答这个问题。提供这种额外的背景将显着提高其长期价值。请编辑您的答案以添加解释,包括适用的限制和假设。
猜你喜欢
  • 2015-04-05
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多