bash - 如何获取通过管道传输到 Bash 中另一个进程的进程的 PID?

标签 bash pipe pid

我正在尝试在 Bash 中实现一个简单的日志服务器。它应该将文件作为参数,并使用 netcat 在端口上提供它。

( tail -f $1 & ) | nc -l -p 9977

但问题是当 netcat 终止时,tail 仍然在运行。 (澄清:如果我不 fork tail 进程,即使 netcat 终止,它也会永远运行。)

如果我以某种方式知道尾部的 PID,那么我就可以在之后杀死它。
显然,使用 $!将返回 netcat 的 PID。

如何获取tail进程的PID?

最佳答案

另一种选择:使用重定向到子外壳。这改变了后台进程的启动顺序,所以 $!给出 tail 进程的 PID。

tail -f $1 > >(nc -l -p 9977) &
wait $!

关于bash - 如何获取通过管道传输到 Bash 中另一个进程的进程的 PID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1652680/

相关文章:

c++ - 如何在 Mac OS 的 C/C++/Objective-C 中找出 SystemUIServer 进程的 PID?

linux - Bash 从给定的 PID 读取标准输入

linux - 如果两台机器上的文件都丢失了,如何退出 shell 脚本?

mysql - shell 脚本中 csv 上传出现意外结果

bash 测试产生 "echo: command not found"

linux - 制作 bash 脚本以接受来自文件的输入或管道输出

regex - grep for word 直到 char

postgresql - 将数据从 clickhouse 传输到运行在不同机器上的 PostgreSQL

交互式 ocaml 解释器与另一个进程之间的通信

algorithm - 具有较大且不可预测异常的 PID 控制回路