[英]PHP exec in background using & is not working
我在Ubuntu 13.04上使用此代碼,
$cmd = "sleep 20 &> /dev/null &";
exec($cmd, $output);
雖然它實際上在那里坐了20秒並等待:/通常它在使用&
將進程發送到后台時工作正常,但在這台機器上php不會這樣做:/
什么可能導致這?
嘗試
<?PHP
$cmd = '/bin/sleep';
$args = array('20');
$pid=pcntl_fork();
if($pid==0)
{
posix_setsid();
pcntl_exec($cmd,$args,$_ENV);
// child becomes the standalone detached process
}
echo "DONE\n";
我測試了它的工作原理。 在這里,您首先分叉php進程,然后完成任務。
或者,如果pcntl模塊不可用,請使用:
<?PHP
$cmd = "sleep 20 &> /dev/null &";
exec('/bin/bash -c "' . addslashes($cmd) . '"');
REASON不起作用的是exec()
執行你傳入它的字符串。 由於&
由Shell解釋為“在后台執行”,但你不執行你的殼exec
調用, &
只是沿着經過20
到/bin/sleep
可執行文件-這可能只是忽略了。
這同樣適用於輸出的重定向,因為它也由shell解析,而不是在exec中解析。
因此,您需要找到一種方法來分叉您的進程(如上所述),或者將子進程作為shell運行的方法。
我的解決方法是使用Apache2和任何版本的PHP在ubuntu 13.04上執行此操作:
libssh2-php
,我剛使用nohup $cmd &
在本地SSH會話中使用PHP並且運行它很好的后台,當然這需要放置某些安全協議,例如為webserver用戶啟用SSH訪問,所以它將具有類似exec的權限,然后只允許localhost登錄到webserver ssh帳戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.