【问题标题】:PHP exec(), can I fire and forget?PHP exec(),我可以解雇并忘记吗?
【发布时间】:2011-02-08 12:01:03
【问题描述】:

我一直在尝试通过一个 php 表单来执行一个 java 应用程序......所以提交按钮会触发一个执行命令:

exec("java -jar c:\edu.uniroma3.jar c:\parameter2BPassed");

第一个路径决定jar文件的位置,第二个作为参数。

问题是脚本处理时间太长,我想绕过等待,有没有办法(就像火灾一样忘记)?脚本将结果写入文件,我可以每 5 分钟检查一次文件是否存在,但等待进程完成时卡住很不方便......

有什么建议吗?

提前谢谢你

【问题讨论】:

  • 也许尝试 system() 而不是 exec() ?不确定它是否会按照您想要的方式工作.. 在 linux 中,您可以将一个进程放在后台.. 在 Windows 中......好吧......还有更多工作
  • OK .. 多亏了 ircmaxell,问题解决了,这是一个重复的帖子,很抱歉,但无论如何,当您使用错误的关键字时,很难找到该帖子;我该怎么处理这个帖子?删除?
  • 我也想在这里添加解决方案:
  • 我建议您删除该问题以防止网站混乱(因为它确实是重复的)。否则答案池会被稀释并使搜索返回的结果更少而不是更多......

标签: java php exec fire-and-forget


【解决方案1】:

我认为这是同样的问题

Asynchronous shell exec in PHP

正如 cmets 所指出的,上述内容仅适用于 *nix 环境,但我在 windows 中发现了与此类似的情况:

http://www.somacon.com/p395.php

不过,考虑其他解决方案可能会更好,例如可以将工作发送到未连接到网络服务器的单独进程。

Web 服务器有时会回收进程,而后台进程并不总是孤立的,据我所知,因此您可能会杀死您的外部进程,除非它是完全独立的。

【讨论】:

  • 恐怕这是一个完全不同的..我试过这个 exec("java -jar C:\edu.uniroma3.lexmeter.jar ".$XMLFileLoc." /dev/null 2>/开发/空 &");但它甚至没有执行
  • 这是在 linux 中完成的 :) 上面的问题是在基于 windows 的机器上@Nad 你有 windows,/dev/null 不存在 :)
  • 这也是非常、非常错误的——它有时会起作用,但它会以奇怪而奇妙的方式破坏你的应用程序。这不是如何从 Web 请求运行后台进程。
  • @symcbean - 运行 bg 进程的更好/最佳方式是什么?
【解决方案2】:

我也想在这里添加解决方案:
$shell = new COM("WScript.Shell");
$shell->run($command, 0, false);

像魔术一样工作:) thx alot ircmaxell

【讨论】:

    【解决方案3】:

    由于你在windows上,你需要启动一个java程序,你可以用javaw.exe代替java.exe。

    windows 上的 javaw,旨在在不打开 cmd 窗口的情况下启动 jvm。 也许它可以帮助

    【讨论】:

      【解决方案4】:

      在 MSWindows 上尝试:

      exec("start java -jar c:\edu.uniroma3.jar c:\parameter2BPassed");
      

      【讨论】:

      • start 正在阻止控制台程序。查看我在 cmets 中链接到的副本...
      猜你喜欢
      • 2015-11-29
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2011-03-19
      相关资源
      最近更新 更多