java - 获取管道起始处进程的 pid

标签 java shell pipe

我有一个运行 Java 进程 p1 的 shell 脚本,还有一个从 p1 获取输入的非 Java 进程 p2。

如何获取p1的进程ID?

我有一个无法预测的 shell 脚本(有时有效,有时无效)。 我浏览过网络,但似乎没有一个答案是完美的。

我的脚本:

nohup sh -c "exec java p1 | p2 2>&1" &
$pid=`echo $!`
my_pid=exec ps -eo "%p %c %P" | awk -v p=$pid 'p==$3{print $1 $2}' | grep java | sed -e 's/java//'

echo "my_pid $my_pid"

最佳答案

这是 mmd's answer 的简化版本从我链接到的问题:

{ java p1 & echo $! >&2; } | p2 2>&1 &

这会在标准错误上打印 p1 的 PID。您还会从 shell 收到一条消息,告诉您 echo 命令已完成,但您可以忽略它。

关于java - 获取管道起始处进程的 pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667851/

相关文章:

java - 如何迭代 Java 8 String Stream 并将行追加到 String?

linux - 检查 git 提交是否是一天的第一天的脚本

c++ - 用 dup 管道传输后如何取回标准输出?

java - 我将如何编写自动检查以确保每个参数都有特定的注释?

java - 使用 H2 数据库进行 JUNIT 测试时出现错误 "expected identifier"

java - 无法在 Jframe/标签内重新绘制

linux - 使用父目录和祖父目录重命名文件

java - Jenkins运行远程shell脚本的问题

c - 如何在我的程序中使用终端命令的输出?

bash - 在 Bash 中捕获 stdout 和 stderr