当前位置: 首页 > 面试题库 >

Java ProcessBuilder:结果进程挂起

欧阳声
2023-03-14
问题内容

我一直在尝试使用Java的ProcessBuilder在Linux中启动应“长期”运行的应用程序。该程序的运行方式是启动命令(在本例中,我正在启动媒体播放应用程序),允许其运行并检查以确保它没有崩溃。例如,检查PID是否仍处于活动状态,然后重新启动该进程(如果已终止)。

我现在遇到的问题是PID在系统中仍然有效,但是应用程序的GUI挂起了。我尝试将ProcessBuilder(cmd).start()移到一个单独的线程中,但这似乎并没有解决任何问题,正如我希望的那样。

基本上,结果是,对于用户来说,该程序似乎已经崩溃,但是杀死了驱动ProcessBuilder.start()的Java进程实际上使所创建的Process恢复其正常行为。这意味着Java应用程序中的某些内容正在干扰生成的Process,但是目前我还不知道是什么。(因此,为什么我尝试将其分成另一个线程,似乎没有解决任何问题)

如果有人有任何意见/想法,请让我知道,因为我一生无法思考如何解决此问题。

编辑:我不关心从流程创建的I / O流,因此没有采取任何措施来处理-这会导致流程本身挂起吗?


问题答案:

如果该进程写入stderrstdout,而您没有阅读它-
它只会“挂起”,在写入时阻塞stdout/err。重定向stdout/err/dev/null使用Shell或stdout/err与redirectErrorStream(true)合并并生成另一个从stdout进程读取的线程



 类似资料:
  • 我创建了一个应用程序,其中一个地点列表保存在数据库中。我只根据Google留档保存了保存地点的地点ID。 然后我创建了一个界面,让用户输入他们的当前位置(mCurrentLocation)。 然后,我创建了一个异步任务,检查数据库中保存的每个地点ID,并检查哪些地点距离用户位置500米以内。这是在doInBackground中完成的。根据Google文档,我使用了getPlaceById和setR

  • 问题内容: 我尝试完成的任务是流式处理ruby文件并打印输出。(注意:我不想一次打印出所有内容) main.py puts “hello” 问题 流文件工作正常。打招呼/再见输出将延迟2秒打印。就像脚本应该工作一样。问题是readline()最终挂起并且永不退出。我从来没有达到最后的打印。 我知道这里有很多类似的问题,但是这些都不是让我解决问题的方法。我并不是整个子流程中的人,所以请给我一个更实际

  • 问题内容: Python版本:2.6.7 我在for循环中有以下subprocess.call,该循环被执行18次,但是,该过程始终挂在第19个循环上: 控制台输出如下所示: 由于我对python脚本不是很熟悉,所以我只是在徘徊我是否在做错什么…我怀疑某个地方出现了死锁。 会处理这些问题吗? 在什么情况下subprocess.call会挂起任何专家答案?非常感谢 问题答案: 当使用子过程时,我倾向

  • 我正在做一个大学作业,我必须午餐3个服务器处理客户和一个服务器组的领导,这里是场景: 领导者开始。 leader 运行 3 台服务器(必须使用 Runtime.getRuntime().exec() 将它们作为 jar 文件运行); 向服务器发送激活消息以开始为客户端提供服务 客户端开始与服务器通信。 问题是在客户端发出3或4个请求后,服务器挂起,只有当领导者终止时才完成其工作。如果我从cmd手动

  • 我有一个服务器(40GB RAM),java进程在启动时挂在上面。如果我简单地在shell上键入“java”,它会打印帮助消息,然后永远不会退出。 PID用户PR NI VIRT RES SHR S%cpu%mem时间+命令 13根15-5 0 0 0 S 88 0.02302:14 ksoftirqd/3 25根15-5 0 0 0 S 73 0.02782:56 ksoftirqd/7 4根1

  • 我想在JAVA程序中执行一个EXE文件。 它工作正常,但我希望EXE的输出立即在我的JAVA程序的文本区域中。 目前,我在“ping”命令完全完成后得到输出(因此JAVA程序挂起了大约3秒)。但是我想马上有结果... 我做错了什么? 突击队向后。 好吧,我想使用这个程序:https://iperf.fr/iperf-download.php 输出如下所示: 不过,我只有在iperf运行后才能得到这