首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我衍生的进程仍然导致IntelliJ等待?

为什么我衍生的进程仍然导致IntelliJ等待?
EN

Stack Overflow用户
提问于 2010-03-09 00:01:07
回答 1查看 463关注 0票数 0

我正在尝试将服务器作为Ant工件的一部分启动。

下面是相关的代码行:

代码语言:javascript
复制
    <exec dir="." executable="cmd.exe" spawn="true">
        <arg line="/c c:\Java\james-2.3.2\bin\debug.bat" />
    </exec>

如果我从命令行使用ant启动它,就会产生一个进程,并得到一个命令提示符,一切似乎都很正常。但是,如果我从IDE6开始构建,构建会一直保持活动状态,直到我杀死服务器为止。

下面是IntelliJ用来启动ant的代码:

代码语言:javascript
复制
C:\Java\jdk1.6.0_02\bin\java -Xmx128m -Dant.home=C:\Java\apache-ant-1.7.1 -Dfile.encoding=UTF-8 -classpath "C:\Java\apache-ant-1.7.1\lib\ant-antlr.jar;C:\Java\apache-ant-1.7.1\lib\ant-apache-bcel.jar;C:\Java\apache-ant-1.7.1\lib\ant-apache-bsf.jar;C:\Java\apache-ant-1.7.1\lib\ant-apache-log4j.jar;C:\Java\apache-ant-1.7.1\lib\ant-apache-oro.jar;C:\Java\apache-ant-1.7.1\lib\ant-apache-regexp.jar;C:\Java\apache-ant-1.7.1\lib\ant-apache-resolver.jar;C:\Java\apache-ant-1.7.1\lib\ant-commons-logging.jar;C:\Java\apache-ant-1.7.1\lib\ant-commons-net.jar;C:\Java\apache-ant-1.7.1\lib\ant-jai.jar;C:\Java\apache-ant-1.7.1\lib\ant-javamail.jar;C:\Java\apache-ant-1.7.1\lib\ant-jdepend.jar;C:\Java\apache-ant-1.7.1\lib\ant-jmf.jar;C:\Java\apache-ant-1.7.1\lib\ant-jsch.jar;C:\Java\apache-ant-1.7.1\lib\ant-junit.jar;C:\Java\apache-ant-1.7.1\lib\ant-launcher.jar;C:\Java\apache-ant-1.7.1\lib\ant-netrexx.jar;C:\Java\apache-ant-1.7.1\lib\ant-nodeps.jar;C:\Java\apache-ant-1.7.1\lib\ant-starteam.jar;C:\Java\apache-ant-1.7.1\lib\ant-stylebook.jar;C:\Java\apache-ant-1.7.1\lib\ant-swing.jar;C:\Java\apache-ant-1.7.1\lib\ant-testutil.jar;C:\Java\apache-ant-1.7.1\lib\ant-trax.jar;C:\Java\apache-ant-1.7.1\lib\ant-weblogic.jar;C:\Java\apache-ant-1.7.1\lib\ant.jar;C:\Java\apache-ant-1.7.1\lib\xercesImpl.jar;C:\Java\apache-ant-1.7.1\lib\xml-apis.jar;C:\Java\jdk1.6.0_02\lib\tools.jar;C:\Program Files\JetBrains\IntelliJ IDEA 6.0\lib\idea_rt.jar" com.intellij.rt.ant.execution.AntMain2 -logger com.intellij.rt.ant.execution.IdeaAntLogger2 -inputhandler com.intellij.rt.ant.execution.IdeaInputHandler -buildfile C:\Java\Projects\CcMailer\ccmailer.xml jar

我怀疑inputhandler参数与问题有关,但如果我自己运行它,问题就不会重现。无论哪种方式,我对IntelliJ做什么的控制都是有限的。

我的问题是: IntelliJ是如何知道进程正在运行的?Ant进程早就不复存在了。有没有办法以一种更隐蔽的方式启动子进程,这样IntelliJ甚至不会知道有什么东西需要等待?

到目前为止,我尝试了以下内容:我尝试使用start命令,如下所示:

代码语言:javascript
复制
    <exec dir="." executable="cmd.exe" spawn="true">
        <arg line="/c start cmd /c c:\Java\james-2.3.2\bin\debug.bat" />
    </exec>

我还尝试使用python,代码如下:

代码语言:javascript
复制
import os.path
import subprocess
subprocess.Popen(["cmd.exe", "/c", "debug.bat"], stdin=open(os.path.devnull), stdout=open(os.path.devnull, "w"), stderr=subprocess.STDOUT)

无济于事。在我终止服务器之前,build窗口始终处于打开状态。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2010-03-10 23:33:50

我已经放弃了解决这个问题,所以我设置了一个XML RPC服务器来执行启动和停止,启动/关闭脚本发出一个XML RPC调用。

服务器代码(简化):

代码语言:javascript
复制
from __future__ import with_statement

from threading import Lock
from SimpleXMLRPCServer import SimpleXMLRPCServer

server = SimpleXMLRPCServer(("localhost", 8000), allow_none=True)
server.register_introspection_functions()

class JamesController(object):
    def __init__(self):
        self.lock = Lock()
        self.started = False

    def start(self):
        # starting code using subprocess

    def stop(self):
        # stopping code


server.register_instance(JamesController())
server.serve_forever()

然后,启动/停止脚本如下所示:

代码语言:javascript
复制
import xmlrpclib

s = xmlrpclib.Server('http://localhost:8000')
s.start()

它很笨拙,需要零星的一些time.sleep()调用,但它可以完成这项工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2402635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档