【问题标题】:Killing subprocess started insinde new terminal杀死子进程在新终端内启动
【发布时间】:2018-09-14 23:50:25
【问题描述】:

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

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

【问题讨论】:

    标签: java linux process subprocess rfcomm


    【解决方案1】:

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

    由于我想终止阻塞 rfcomm 通道的进程,我声明 并且 不要使用其他通道 并且 不关心是否有其他与 rfcomm 相关的内容被终止,我只是在关机挂钩中运行Runtime.getRuntime().exec("sudo pkill rfcomm"); 行。这对我有用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 2017-07-03
      • 2018-11-10
      • 2012-09-19
      • 2017-07-27
      • 1970-01-01
      • 2016-04-30
      相关资源
      最近更新 更多