我有一个运行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"
答案 0 :(得分:2)
这是我链接到的问题mmd's answer的简化版本:
{ java p1 & echo $! >&2; } | p2 2>&1 &
这会在标准错误上打印p1的PID。您还会收到来自shell的消息,告诉您echo命令已完成,但您可以忽略它。