簡體   English   中英

PHP exec在后台使用&不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM