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