2011-05-17 70 views
0

我在Linux下工作。我有3个文件(每个大约2Gb含有人类基因组序列)。我有java代码来通过PHP开发的web界面来处理这些文件。处理时间约为24小时甚至更长。php java批处理

如何从PHP运行Java代码以便在关闭浏览器时处理不会终止。

由于处理时间太长,因此在浏览器处于打开状态直到过程完成之前不可行。

我假定它需要批处理。

+0

你的问题到底是什么?你不知道如何开始后台进程?你期待在PHP前端开始的过程中发生什么(因为你不想保持浏览器打开)? – wimvds 2011-05-17 07:18:12

+0

[php执行后台进程]的可能重复(http://stackoverflow.com/questions/45953/php-execute-a-background-process) – wimvds 2011-05-17 07:19:59

+0

我需要在后台运行进程,但进程启动从网页(让按下提交按钮后说)。然后,我需要跟踪每个用户的运行流程,这些用户应该可以从用户页面看到不同的用户。 – World 2011-05-17 07:25:07

回答

2

据我了解你的问题你想从PHP调用你的java代码?正确?所以这里是解决方案

<?php 
    //use system call to execute java class or jar 
    system('java yourclass', $retval); 
?> 

使用上面的php脚本。执行你的java代码。

获取进程inforamtion看到follwoing

PHP getting process information

+0

我该如何跟踪过程。我的意思是我怎样才能得到这个事件的进程ID。 – World 2011-05-17 07:35:03

+0

@Bishwo,你不会得到进程的id,但是你可以在你的java文件中做一些登录,这会让你知道你的java代码。此外,请参阅@Savas Alp答案。 – 2011-05-17 09:16:01

+0

@Ummar可以从java代码中获取进程ID。我想知道在PHP中是否有可能。据我所知PHP不提供执行命令的进程ID的功能。如果我可以在PHP代码中获得进程ID,我的工作将非常简单。 – World 2011-05-17 10:06:03

0

我可以建议如果你有权访问源代码,你实际上可以使用Java RMI并从RMI内启动所有的处理。这样你可以从等式中移除PHP。

然后,如果您在开始之前确实需要PHP来设置某些变量或设置,则可以在使用Java RMI开始处理之前将它们写入文件。

如果您需要关于如何获得RMI工作,你可以参考教程:

http://download.oracle.com/javase/tutorial/rmi/index.html

干杯!

0

这是我提出的解决方案:

1)创建一个数据库表或配置文件在哪里存储一个标志,“add_process_to_queue”为例。

2)从你的PHP面板,你可以设置这个标志设置,用于检查此标志的cron作业1

3),如果它被设置为1,作业重置为0,并开始Java程序

0

基于您的评论,在接受的答案用于php execute a background process的方法应该做的很好。只需启动进程,获取进程ID并将其与启动进程的用户一起存储在数据库中(或使用可用于标识启动进程的用户的文件名)。使用提供的isRunning方法(仅为所提供的进程ID提供ps),您可以检查进程是否仍在运行。

0

在Unix/Linux中,如果要启动在后台运行的进程,则必须在命令末尾添加&字符。

> java blabla & 

因此,呼叫shell_execute()这样的:

shell_execute('java blabla &') 

因此,将你的脚本结束之后继续处理。

+0

如何使用shell_exec()获得执行命令的pid – World 2011-05-17 09:12:49