返回命令的进程ID而不是返回tee命令的进程ID

4

我正在尝试获取执行命令的pid,但它返回的是tee命令的pid。

例如:

echo "$$"; exec some_script.sh | tee output.txt

与其返回“exec some_script.sh”进程的pid,tee 命令返回了自身的pid。有没有一种方法可以返回“exec some_script.sh”的pid?


你为什么要首先使用 exec - chepner
1个回答

4

我认为所贴出的序列将显示管道父进程的PID - 通常是用于启动命令的bash解释器的PID(而不是tee的PID)。

有两个选项来解决这个问题:

1. 考虑修改命令为:

(echo "$BASHPID" ; exec some_script.sh) | tee output.txt

'$$' 用于跟踪父Bash的PID。BASHPID用于跟踪管道的第一部分中使用的子shell的PID,该子shell将用于运行脚本,因为它使用了 `exec` 命令。

2. 使用命令替换

some_script.sh > >(tee output.txt) &
SCRIPT_PID=$!
echo "SCRIPT_PID=$SCRIPT_PID"

这个选项会消除显式管道。主要的优点是让调用bash知道脚本PID,从而可以将它用于其他命令(等待、杀死...)。无需从output.txt中解析PID。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接