【发布时间】:2015-11-11 12:28:52
【问题描述】:
我正在用 Servoy 编写一个应用程序,它调用一个 Matlab 可执行文件来执行一些复杂的数学运算并将结果返回到数据库。
问题是 Matlab 可执行文件非常慢,尤其是在启动时。
我想在执行第一个操作时启动可执行文件,然后在后台暂停它并在需要时再次调用它。 我可以从 Servoy 调用终端,但我不知道如何让 Matlab 暂停和恢复(如果可能的话)。
我期待任何建议。
【问题讨论】:
我正在用 Servoy 编写一个应用程序,它调用一个 Matlab 可执行文件来执行一些复杂的数学运算并将结果返回到数据库。
问题是 Matlab 可执行文件非常慢,尤其是在启动时。
我想在执行第一个操作时启动可执行文件,然后在后台暂停它并在需要时再次调用它。 我可以从 Servoy 调用终端,但我不知道如何让 Matlab 暂停和恢复(如果可能的话)。
我期待任何建议。
【问题讨论】:
理论上您可以使用现有的 bash 解决方案,使用 input 暂停 matlab 并输入任意键以继续,但我强烈建议不要这样做。
有两种不错的方法,首先您可以构建一个库而不是可执行文件。 Matlab Builder JA 允许您将功能导出为 jar 文件。
您还可以创建一个应用程序服务器(可执行文件),它允许通过 XMLRPC 或类似协议调用方法。在这里我不确定部署到可执行文件时可以使用哪些功能,可能是您必须选择 XMLRPC 的替代方法。
这两种可能性都允许您将任务拆分为单独的步骤,并在您想继续时一一调用。
【讨论】:
您可以向进程发送信号以完成此操作:
kill -STOP $PID
当 SIGSTOP 被发送到一个进程时,通常的行为是将该进程暂停在其当前状态。该进程只有在收到 SIGCONT 信号时才会恢复执行。 SIGSTOP 和 SIGCONT 用于 Unix shell 中的作业控制,以及其他用途。 SIGSTOP 不能被捕获或忽略。
继续:
kill -CONT $PID
当向进程发送 SIGSTOP 或 SIGTSTP 时,通常的行为是将该进程暂停在其当前状态。该进程只有在收到 SIGCONT 信号时才会恢复执行。 SIGSTOP 和 SIGCONT 用于 Unix shell 中的作业控制,以及其他用途。
更多信息here
【讨论】: