相关疑难解决方法(0)

如何终止进程并确保 PID 未被重用

例如,假设您有一个类似于以下内容的 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 都可以,但我正在考虑这里的一般情况。

process kill

42
推荐指数
5
解决办法
1万
查看次数

后台进程的可靠返回码

让我们假设以下 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

bash shell-script exit background-process

16
推荐指数
1
解决办法
3万
查看次数

标签 统计

background-process ×1

bash ×1

exit ×1

kill ×1

process ×1

shell-script ×1