Java 如果在IntelliJ中之前运行shell脚本,则调试器不会将自身附加到远程目标

Java 如果在IntelliJ中之前运行shell脚本,则调试器不会将自身附加到远程目标,java,debugging,intellij-idea,Java,Debugging,Intellij Idea,我需要用一个shell脚本启动一个Java应用程序,以便稍后将remove调试器附加到该应用程序上(通常不是,而是这个特定的应用程序)。在shell脚本中运行.jar时的参数有: "-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y" 但这一部分正在发挥作用。如果我手动执行shell脚本并在之后从IntelliJ运行调试配置,那么一切都会按预期工作。 但是,如果我告诉IntelliJ在尝试附加调试器之前自动执行s

我需要用一个shell脚本启动一个Java应用程序,以便稍后将remove调试器附加到该应用程序上(通常不是,而是这个特定的应用程序)。在shell脚本中运行.jar时的参数有:

"-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y"
但这一部分正在发挥作用。如果我手动执行shell脚本并在之后从IntelliJ运行调试配置,那么一切都会按预期工作。 但是,如果我告诉IntelliJ在尝试附加调试器之前自动执行shell脚本,那么它将不起作用。将执行shell脚本并打开调试端口,但调试器不会将自身附加到该端口

这是调试器的运行配置:

当我运行它时,我可以看到shell脚本在控制台中执行:

Listening for transport dt_socket at address: 8000
但调试器不会附加

编辑:
我解决了这个问题。shell脚本正在阻塞,因此IntelliJ不会继续并附加调试器。因此,我尝试在后台运行它,如下所示:

nohup ./shell_script -debug > /dev/null &

这在航站楼很好用。如果执行该命令,它将立即继续。但是,如果我从IntelliJ执行相同的命令,则不会在后台运行,并且会继续阻塞。

显然,Ant在执行阻塞的shell脚本时能够生成一个新进程。因此,我能够用一个非阻塞的Ant目标启动应用程序

<target name="run" depends="clean,install-release">
    <exec executable="pkill" spawn="false">
        <arg line="-f application_name"/>
    </exec>
    <exec executable="bash" spawn="true">
        <arg line="${target}/install/some.sh -debug"/>
    </exec>
</target>