【发布时间】:2018-09-14 23:50:25
【问题描述】:
我有一个 java 程序,它产生一个新的子进程,它本身在一个新的终端窗口中执行一个命令:
Process proc = Runtime.getRuntime().exec("lxterminal -e sudo rfcomm watch " + BLUETOOTH_CHANNEL);。
rfcomm watch *CHANNEL* 在我的情况下通过蓝牙监视声明的通道/linux 设备文件以获取传入数据。取消连接后,我希望稍后能够在同一设备文件上的程序中恢复它。由于rfcomm watch 阻止了声明的设备文件,因此必须在再次运行相同的命令之前关闭它。这可以通过向进程发送 SIGTERM 来手动实现(Ctrl + c 在新生成的终端窗口内)。
我的问题是,当我执行proc.destroy() 或proc.destroyForcibly() 时,似乎只有终端被杀死并且rfcomm watch 仍在运行(这会导致再次尝试观看相同的设备文件时出现错误消息)。 rfcomm watch 也仍然出现在ps 下。
如何杀死新的终端窗口和以编程方式在其中运行的命令?
【问题讨论】:
标签: java linux process subprocess rfcomm