中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
兖州市| 衡东县| 陵川县| 西宁市| 微博| 新巴尔虎左旗| 正镶白旗| 刚察县| 阳朔县| 嘉定区| 同心县| 五指山市| 石台县| 怀安县| 舞阳县| 牟定县| 滦平县| 舟山市| 大方县| 南皮县| 石家庄市| 怀远县| 上犹县| 青岛市| 东阿县| 罗定市| 德阳市| 雅安市| 汝阳县| 德州市| 隆尧县| 塔城市| 东安县| 突泉县| 丘北县| 铜鼓县| 沧源| 岳阳市| 肃南| 巫溪县| 昌邑市|