繁体   English   中英

通过 shell_exec() 在后台执行命令

[英]Executing command in background by shell_exec()

在 Linux 上,我可以使用shell_exec()如下在后台运行命令:

shell_exec("/usr/bin/nohup curl -o /dev/null --data \"$data\" $url >/dev/null 2>&1 &");

请注意,上面的行不会等待结果,代码将立即恢复。

如何在 Windows 上实现它? 最好是 Windows 内置的东西。

我会查看这个用例的 Symfony Process 组件。 它提供了同步和异步执行的方法。 它可以通过 Composer 轻松安装,但至少需要 PHP 7.1。
文档可以在这里找到: https : //symfony.com/doc/current/components/process.html

您的用例的示例可能如下所示:

$process = new Process(['curl', '--data', $data, $url]);
$process->start();

请注意,我省略了-o选项,因为除非您明确请求,否则子进程的输出不会显示。 快速浏览发现一些帖子说start()方法在 Windows 上阻塞,但似乎已经实施并合并了一个补丁: https : //github.com/symfony/symfony/pull/10420

编辑:如果您不想使用库,您可以组合使用popen()pclose()和 Windows 工具start

pclose(popen('start /B curl --data "'.$data.'" '.$url, 'r'));

这会在后台运行程序而不打开窗口并立即返回。

编辑 2:使用start /B的技巧来源: http : //php.net/manual/en/function.exec.php#86329

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM