/dev/null 2>&1 &");"> /dev/null 2>&1 &");">
117.info
人生若只如初见

php怎么异步执行shell脚本

在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脚本的方法,根据实际需求选择合适的方法。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe164AzsLAA5RBVY.html

推荐文章

  • php执行shell命令时间太长怎么解决

    当PHP执行shell命令时间过长时,可以尝试以下解决方案: 检查命令是否耗时过长:首先确认执行的命令是否本身需要大量时间来完成。可以在命令行中手动执行该命令,...

  • mysql datetime的用法是什么

    MySQL的datetime数据类型用于存储日期和时间的值。它的用法如下: 创建datetime列:
    CREATE TABLE table_name ( column_name DATETIME
    ); 插入datetim...

  • c++随机函数rand怎么使用

    在C++中,可以使用rand函数来生成随机数。使用rand函数的基本步骤如下: 包含头文件:在程序中包含头文件。 设置随机数种子:在程序开始时,通过调用srand函数设...

  • PHP中Mailer库如何调用

    使用PHP中的Mailer库可以通过以下步骤进行调用: 首先,确保已经安装了Mailer库。可以使用Composer来安装Mailer库,可以在项目的根目录下创建一个composer.json文...

  • python字符串转日期的方法是什么

    在Python中,你可以使用datetime模块来将字符串转换为日期。以下是一种常见的方法:
    from datetime import datetime date_str = "2021-10-15" # 你的日期字...