>我有一个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
.
如何以编程方式终止新终端窗口和在其中运行的命令?
我找到了适合我的目的但可能不适合类似问题的解决方案/解决方法。
由于我想杀死阻止我声明的 rfcomm 通道的进程,并且不使用其他通道,也不关心是否其他与 rfcomm 相关的内容被杀死,所以我只是在关闭钩子中Runtime.getRuntime().exec("sudo pkill rfcomm");
运行该行。这对我有用。
如果只杀死一个特定的进程很重要,可以做这样的事情:如何给出通过管道杀死的参数