我使用 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/