我正在尝试使用命令替换来获取后台作业的 PID。后台作业以setsid
. 问题是父进程在命令替换时受到打击。
这是一个示例脚本:
#!/bin/bash
if [ "$1" = "start" ]; then
while true; do date > "bg.date"; sleep 1; done &
echo $!
exit 0
fi
pid="$(setsid "$0" start)"
echo "pid=$pid"
./script start
按预期工作(即,在后台作业运行时立即退出到 bash 提示符)。setsid ./script start
也可以按预期工作。- 但
./script
不能按预期工作:它不打印 PID(除非后台作业被手动终止)。