php執行shell不阻塞方法

2022-07-19 21:54:29 字數 870 閱讀 9245

大家都知道php執行系統命令的方法有: 

system() 輸出並返回最後一行shell結果。 

exec() 不輸出結果,返回最後一行shell結果,所有結果可以儲存到乙個返回的陣列裡面。 

passthru() 只呼叫命令,把命令的執行結果原樣地直接輸出到標準輸出裝置上。

這些方法都會等待命令執行完畢後才會繼續執行後續的程式 

不阻塞可以將命令輸出的內容寫入系統的乙個**站檔案,這樣程式就不會阻塞 

例如:

shell_exec("/usr/local/php/bin/php /www/t.php  > /dev/null 2>&1 &");//可以執行

exec("/usr/local/php/bin/php /www/t.php  > /dev/null 2>&1 &");//可以執行

shell中可能經常能看到:>/dev/null 2>&1

命令的結果可以通過%>的形式來定義輸出

/dev/null 代表空裝置檔案

代表重定向到**,例如:echo 「123」 > /home/123.txt 

1 表示stdout標準輸出,系統預設值是1,所以」>/dev/null」等同於」1>/dev/null」 

2 表示stderr標準錯誤 

& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1

那麼本文標題的語句: 

1>/dev/null 首先表示標準輸出重定向到空裝置檔案,也就是不輸出任何資訊到終端,說白了就是不顯示任何資訊。 

2>&1 接著,標準錯誤輸出重定向等同於 標準輸出,因為之前標準輸出已經重定向到了空裝置檔案,所以標準錯誤輸出也重定向到空裝置檔案。

PHP非阻塞執行方法

正常訪問乙個a方法,a方法需要立即返回,但是a方法會呼叫乙個b方法,b方法可能會阻塞執行很長時間 或者b方法是定時任務 使用fsockopen方法,請求b方法的url,並設定為非阻塞模式傳送請求 fsockopen test.php 非阻塞請求 param url return bool funct...

解決php的exec 不執行shell命令的問題

最近遇到乙個問題,客戶會同時輪詢修改上百條資料,併發性又很高,但又不是很頻繁地使用,於是寫了乙個悲觀鎖,使用佇列在後台非同步處理,使用exec主動觸發任務。public function lock test 1.這裡使用exec主動觸發任務 也可以使用system呼叫sh指令碼,指令碼中也要將返回寫...

php執行shell指令碼

原文 php作為一門伺服器端指令碼語言,也是可以呼叫系統命令的,這其中就包括了執行shell指令碼 編寫test.sh指令碼如下 bin sh mkdir www a 很簡單的乙個shell指令碼 建立乙個資料夾 php指令碼如下 system usr bin test.sh 在執行前 首先需要驗證...