0

我有一个运行 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"
4

1 回答 1

2

这是我链接到的问题的mmd 答案的简化版本:

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

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

于 2012-05-20T09:43:42.250 回答