我正在尝试获取执行命令的pid,但它返回的是tee命令的pid。
例如:
echo "$$"; exec some_script.sh | tee output.txt
与其返回“exec some_script.sh”进程的pid,tee 命令返回了自身的pid。有没有一种方法可以返回“exec some_script.sh”的pid?
我认为所贴出的序列将显示管道父进程的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"
exec
? - chepner