91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

php怎么異步執行shell腳本

小億
163
2023-12-29 19:19:30
欄目: 編程語言

在PHP中,可以使用exec()函數來執行shell腳本。但是exec()函數是同步的,即在執行完shell腳本之前,PHP腳本會一直等待。如果希望實現異步執行shell腳本,可以使用以下方法:

  1. 使用exec()函數結合&符號將腳本放入后臺執行,例如:
exec("your_script.sh > /dev/null 2>&1 &");

這里的> /dev/null 2>&1是將腳本的輸出重定向到空設備,&符號表示將腳本放入后臺執行。

  1. 使用shell_exec()函數結合nohup命令,例如:
shell_exec("nohup your_script.sh > /dev/null 2>&1 &");

nohup命令用于忽略HUP(掛起)信號,并將腳本放入后臺執行。

  1. 使用proc_open()函數來執行shell腳本并獲取進程句柄,然后使用stream_set_blocking()函數將其設置為非阻塞模式,實現異步執行。
$descriptorspec = array(
    0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
    1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
    2 => array("pipe", "w")   // stderr is a pipe that the child will write to
);

$process = proc_open("your_script.sh", $descriptorspec, $pipes);

// 設置為非阻塞模式
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);

// 關閉不需要的管道
fclose($pipes[0]);

// 獲取腳本的輸出
$output = stream_get_contents($pipes[1]);
$error = stream_get_contents($pipes[2]);

// 關閉管道和進程
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);

以上是幾種在PHP中實現異步執行shell腳本的方法,根據實際需求選擇合適的方法。

0
淮安市| 吉林省| 长垣县| 葵青区| 崇文区| 昌黎县| 墨竹工卡县| 公安县| 鸡泽县| 贞丰县| 建平县| 比如县| 砀山县| 区。| 敖汉旗| 仁化县| 香港| 雷山县| 云林县| 吕梁市| 蒙城县| 松滋市| 桂平市| 高雄县| 盐池县| 塔城市| 丽江市| 剑川县| 全椒县| 靖安县| 汤原县| 尚志市| 鄂伦春自治旗| 永新县| 潞城市| 刚察县| 保康县| 临汾市| 蕉岭县| 甘肃省| 谢通门县|