如何從PHP本身調用外部的shell腳本(或者採用外部的PHP腳本),並在同一腳本中獲取它的進程ID?調用外部shell腳本,並獲得其進程ID
19
A
回答
33
$command = 'yourcommand' . ' > /dev/null 2>&1 & echo $!; ';
$pid = exec($command, $output);
var_dump($pid);
11
如果你想這樣做,嚴格使用工具PHP給你,而不是Unix-specific wizardry,你可以用proc_open
和proc_get_status
這樣做,雖然需要傳遞一個描述符規範成proc_open
使得它令人不快的詳細使用方法:
<?php
$descriptorspec = [
0 => ['pipe', 'r'],
1 => ['pipe', 'w'],
2 => ['pipe', 'w']
];
$proc = proc_open('yourcommand', $descriptorspec, $pipes);
$proc_details = proc_get_status($proc);
$pid = $proc_details['pid'];
echo $pid;
+0
這應該是被接受的答案。 – 2017-10-26 14:25:53
0
對於跨平臺解決方案,檢查出symfony/process。
use Symfony\Component\Process\Process;
$process = new Process('sleep 100');
$process->start();
var_dump($process->getPid());
安裝symfony/process
與作曲家(composer require symfony/process
)後,您可能需要與composer dump-autoload
更新自動加載信息,然後要求自動加載與require __DIR__ . '/vendor/autoload.php';
。
還要注意的是,你可以得到一個只運行進程的PID。有關API的詳細信息,請參閱the documentation。
相關問題
- 1. 調用外部Python腳本
- 2. PHP調用外部腳本
- 3. 殺死調用shell進程的Python腳本是否也會終止shell進程?
- 4. 長進程shell腳本cgi?
- 5. Shell腳本進程計數
- 6. 僅獲得使用shell腳本
- 7. Java打開外部腳本並給出輸入/獲得輸出
- 8. 去EXEC外部python腳本,並獲得返回的輸出
- 9. Bash:在shell腳本中使用進程ID
- 10. Eclipse CDT調試(外部進程)並查找其源代碼
- 11. 使用shell腳本計算進程數
- 12. 檢查bash腳本是從shell還是其他腳本/應用程序調用
- 13. 從shell/Terminal調用腳本並使用Java進程有什麼區別?
- 14. shell腳本如何從外部編輯器獲得輸入(如Git)?
- 15. Ruby:使用腳本內部的外部腳本進行比較
- 16. 從shell腳本調用python腳本cron
- 17. 如何在多進程中從python調用shell腳本?
- 18. 從子進程調用shell腳本中定義的函數
- 19. 獲得較上月shell腳本
- 20. shell腳本並使用cat
- 21. 從shell腳本調用sqlplus
- 22. 在外部腳本中調用模型及其方法
- 23. 如何讓scons調用外部腳本?
- 24. PHP - 調用外部呼應腳本
- 25. 從外部腳本調用database.php CI
- 26. 如何調用外部構建腳本?
- 27. Shell腳本從'時間'獲得實時並保存到變量
- 28. shell腳本得到ssh遠程錯誤
- 29. 調試外部進程?
- 30. 如何獲得內部跨度的文字,並用它爲其它腳本
「>/dev/null 2>&1&echo $!;」 – andho 2009-09-25 08:48:21
這意味着'將所有輸出發送到空設備,這意味着所有的輸出將在標準輸出中可用,回聲$!簡單地echo PID,這是由腳本 – 2009-09-25 15:33:07
這也意味着,該命令將在後臺運行(這將是你想要什麼,如果你想在PID)拍攝的,所以你的PHP腳本不會等待命令完成執行 – Tofandel 2017-06-15 20:50:51