Java 终止子进程已在新终端中启动
我有一个java程序,它生成了一个新的子进程,它本身在一个新的终端窗口中执行一个命令:Java 终止子进程已在新终端中启动,java,linux,process,subprocess,rfcomm,Java,Linux,Process,Subprocess,Rfcomm,我有一个java程序,它生成了一个新的子进程,它本身在一个新的终端窗口中执行一个命令: Process proc=Runtime.getRuntime().exec(“lxterminal-e sudo rfcomm watch”+蓝牙_频道) rfcomm watch*CHANNEL*在我的例子中,通过蓝牙查看声明的CHANNEL/linux设备文件以获取传入数据。当连接被取消时,我希望能够稍后在同一设备文件的程序中恢复连接。由于rfcomm watch会阻止声明的设备文件,因此在再次运行同一
Process proc=Runtime.getRuntime().exec(“lxterminal-e sudo rfcomm watch”+蓝牙_频道)代码>
rfcomm watch*CHANNEL*
在我的例子中,通过蓝牙查看声明的CHANNEL/linux设备文件以获取传入数据。当连接被取消时,我希望能够稍后在同一设备文件的程序中恢复连接。由于rfcomm watch
会阻止声明的设备文件,因此在再次运行同一命令之前必须关闭该文件。这可以通过向进程发送SIGTERM(在新生成的终端窗口中按Ctrl+c)手动实现
我的问题是,当我执行proc.destroy()
或proc.destroy()
时,似乎只有终端被终止,并且rfcomm watch
仍在运行(这会导致再次尝试查看同一设备文件时出现错误消息)rfcomm watch
仍显示在ps
下
如何以编程方式终止新的终端窗口和运行在其中的命令 我找到了一个适合我的目的,但可能不适合类似问题的解决方案/解决方法
由于我想终止阻止rfcomm通道的进程,我声明了,不要使用其他通道,不关心是否终止了与rfcomm相关的任何其他通道,因此我只需运行行Runtime.getRuntime().exec(“sudo pkill rfcomm”)关闭挂钩中的代码>。这对我有用
如果只终止一个特定进程很重要,那么可以这样做: