例如,假设您有一个类似于以下内容的 shell 脚本:
longrunningthing &
p=$!
echo Killing longrunningthing on PID $p in 24 hours
sleep 86400
echo Time up!
kill $p
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩,不是吗?除了进程可能提前终止并且它的PID可能已经被回收,这意味着一些无辜的工作在其信号队列中得到了一个炸弹。在实践中这可能确实很重要,但它仍然让我担心。破解 longrunningthing 使其自身死亡,或者在 FS 上保留/删除其 PID 都可以,但我正在考虑这里的一般情况。
让我们假设以下 bash 代码:
foo > logfile 2>&1 &
foo_pid=$!
while ps -p$foo_pid
do
ping -c 1 localhost
done
wait $foo_pid
if [[ $? == 0 ]]
then
echo "foo success"
fi
Run Code Online (Sandbox Code Playgroud)
假设$?确实包含 的返回码foo而不是 的返回码是否安全ping?如果这个问题的答案是:“你不能假设。” 那么我如何修改这段代码以确保$?始终包含的返回码foo?