杀戮子流程开始在新终端中发挥作用

时间:2018-04-05 08:26:02

标签: java linux process subprocess rfcomm

我有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下。

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

1 个答案:

答案 0 :(得分:1)

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

由于我想杀死阻止rfcomm频道的进程,我声明不使用其他频道并不关心rfcomm相关的其他内容是否会被杀死,我只是在shutdown-hook中运行Runtime.getRuntime().exec("sudo pkill rfcomm");行。这对我有用。

如果只杀死一个特定的过程很重要,可以这样做:How to give arguments to kill via pipe