我有一个Java程序,它产生一个新的子进程,该子进程本身在新的终端窗口中执行命令:
Process proc = Runtime.getRuntime().exec("lxterminal -e sudo rfcomm watch " + BLUETOOTH_CHANNEL);

在我的情况下,rfcomm watch *CHANNEL*监视声明的channel/linux设备文件中通过蓝牙的传入数据。取消连接后,我希望以后可以在同一设备文件上的程序中将其还原。由于rfcomm watch阻止了已声明的设备文件,因此必须在再次运行同一命令之前将其关闭。可以通过将SIGTERM发送到进程(在新生成的终端窗口中按Ctrl + c)来手动实现。

我的问题是,当我执行proc.destroy()proc.destroyForcibly()时,似乎只有终端被杀死并且rfcomm watch仍在运行(尝试再次观看同一设备文件时,这会导致错误消息)。 rfcomm watch也仍然出现在ps下。

如何以编程方式杀死在新终端窗口中运行的命令?

最佳答案

我找到了适合我的目标但可能不适合类似问题的解决方案/解决方法。

由于我想杀死阻塞rfcomm通道的进程,因此我声明不要使用其他通道不在乎是否其他与rfcomm相关的东西被杀死了,我只需要在关闭挂接中运行Runtime.getRuntime().exec("sudo pkill rfcomm");行。这对我有用。

如果仅杀死一个特定进程很重要,则可以执行以下操作:How to give arguments to kill via pipe

10-07 16:40