cron 中的后台作业

cron 中的后台作业

我每两分钟运行一次 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 是一个特殊信号,表示“退出时”

相关内容