杀死子进程开始insinde新终端
Killing subprocess started insinde new terminal
我有 java 程序生成一个新的子进程,该子进程本身在新终端中执行命令 window:
Process proc = Runtime.getRuntime().exec("lxterminal -e sudo rfcomm watch " + BLUETOOTH_CHANNEL);
。
在我的例子中,rfcomm watch *CHANNEL*
通过蓝牙监视声明的 channel/linux 设备文件以获取传入数据。当连接被取消时,我希望稍后能够在同一设备文件上的程序中恢复它。由于 rfcomm watch
阻塞声明的设备文件,因此必须在同一命令再次运行之前将其关闭。这可以通过向进程发送 SIGTERM 来手动实现(Ctrl + c 在新生成的终端 window 中)。
我的问题是,当我执行 proc.destroy()
或 proc.destroyForcibly()
时,似乎只有终端被终止,而 rfcomm watch
仍然是 运行(这会导致错误再次尝试观看同一设备文件时出现的消息)。 rfcomm watch
也仍然出现在 ps
.
下
如何以编程方式杀死新终端 window 和 里面的命令 运行?
我找到了一个 solution/workaround,它符合我的目的,但可能不适用于类似的问题。
因为我想杀死阻塞我声明的 rfcomm 通道的进程 and 不要使用其他通道 and 不关心如果其他 rfcomm-related 被杀死,我只需 运行 shutdown-hook 中的 Runtime.getRuntime().exec("sudo pkill rfcomm");
行。这对我有用。
如果只杀死一个特定的进程很重要,可以这样做:How to give arguments to kill via pipe
我有 java 程序生成一个新的子进程,该子进程本身在新终端中执行命令 window:
Process proc = Runtime.getRuntime().exec("lxterminal -e sudo rfcomm watch " + BLUETOOTH_CHANNEL);
。
rfcomm watch *CHANNEL*
通过蓝牙监视声明的 channel/linux 设备文件以获取传入数据。当连接被取消时,我希望稍后能够在同一设备文件上的程序中恢复它。由于 rfcomm watch
阻塞声明的设备文件,因此必须在同一命令再次运行之前将其关闭。这可以通过向进程发送 SIGTERM 来手动实现(Ctrl + c 在新生成的终端 window 中)。
我的问题是,当我执行 proc.destroy()
或 proc.destroyForcibly()
时,似乎只有终端被终止,而 rfcomm watch
仍然是 运行(这会导致错误再次尝试观看同一设备文件时出现的消息)。 rfcomm watch
也仍然出现在 ps
.
如何以编程方式杀死新终端 window 和 里面的命令 运行?
我找到了一个 solution/workaround,它符合我的目的,但可能不适用于类似的问题。
因为我想杀死阻塞我声明的 rfcomm 通道的进程 and 不要使用其他通道 and 不关心如果其他 rfcomm-related 被杀死,我只需 运行 shutdown-hook 中的 Runtime.getRuntime().exec("sudo pkill rfcomm");
行。这对我有用。
如果只杀死一个特定的进程很重要,可以这样做:How to give arguments to kill via pipe