在管道开始时获取流程的pid

时间:2012-05-19 18:30:03

标签: java shell pipe

我有一个运行Java进程p1的shell脚本,还有一个非Java进程p2,它接受来自p1的输入。

如何获取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"

1 个答案:

答案 0 :(得分:2)

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

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

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