我有一个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