我每两分钟运行一次 cron。通过 cron,我在后台使用“&”运行其他 shell 脚本。cron 退出后,生成的 shell 脚本进程仍在运行,这是理想的行为。
但是当子脚本退出时是否会导致任何僵尸进程。我需要考虑任何特殊情况吗?
答案1
它可能会(我应该检查一下以确保)但无论如何你都可以存储分叉进程的 PID 并在退出时终止它们:
my_forked_process & my_forked_pid=$!
因为你说的是“其他 shell”,所以我假设有几个,所以我们应该使用一个数组:
my_forked_pids=()
my_forked_process1 & my_forked_pids+=($!)
my_forked_process2 & my_forked_pids+=($!)
然后在退出时像这样杀死它们:
for pid in "${my_forked_pids[@]}"; do
kill "$pid"
done
[奖励] 如果你将前一个函数包装起来,你可以设置trap
它在脚本退出时运行,无论何时(当脚本过早终止时是安全的):
trap cleanup_function 0
0 是一个特殊信号,表示“退出时”