2016-08-22 78 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

相關問題