java - 如何销毁Java Process的子进程

标签 java linux shell

我使用 Runtime.getRuntime().exec 来执行命令 tail -f filename | grep str 基于操作系统管道。我设法实现了我的业务逻辑。但是还有一个问题我必须解决: 使用管道时,Process 会为另一个进程执行 tail 命令:

$ ps -ef | grep test.log
admin     6953 32721  0 16:32 ?        00:00:00 /bin/sh -c tail -f /home/admin    
/test.log | unbuffer -p grep '1444379575648'
admin     6957  6953  0 16:32 ?        00:00:00 tail -f /home/admin/test.log

Process.destroy() 方法仅销毁自身(pid:6953)。如何销毁它的子进程(pid:6957)在我的 Java 程序中?

最佳答案

不要使用 Runtime.getRuntime().exec(...),使用 2 个 ProcessBuilder 显式构建各个进程,并连接它们的输入和一起输出以执行管道的等效操作。

然后您将为每个单独的 Process 对象,并可以随意终止它们。

关于java - 如何销毁Java Process的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33033647/

相关文章:

shell - 如何在 Go 中执行具有多个 iname 匹配器的查找命令?

Java - 使用wait()和notify()

java - 在 Mac/OSX 上创建可移植 Android/Eclipse

java - ResultSetMetaData.getColumnName 为 UNION 和非 UNION 查询返回不同的值

linux - 通讯命令 - 不必要的限制?

linux - 如何在 Linux 中转义 scp 复制路径中的空格?

linux - 检查 root 是否在 bash 脚本中

java - 用于 Android 应用程序开发的 JDK

php - Cron Job - 用主文件递归替换文件实例(timthumb 漏洞利用预防)

linux - shell 脚本中 top 命令的 CPU 信息