【发布时间】:2013-12-03 21:46:16
【问题描述】:
我对 bash 脚本中的进程控制有点困惑。
我想要的是运行特定的功能/例程,并在 10:00 停止它们,然后运行一些其他功能。当“其他功能”结束时,我希望第一个功能完全从它们停止时的位置继续。
例如,假设我在 09:50 运行 main.sh。我希望 function_one 在时间为 10:00 时停止,运行 function_two,然后在其确切状态下继续使用 function_one。不用说,function_one 可能非常复杂,并且本身就有后台子进程。
$ cat main.sh
#!/bin/bash
source functions.sh
function_one &
echo $! > function_one_running_in_background_PID.txt
while true; do
sleep 10s
if [[ $(date +%H%M) = 1000 ]]; then
kill -SIGSTOP $(<function_one_running_in_background_PID.txt)
echo Time is 10
function_two
kill -SIGCONT $(<function_one_running_in_background_PID.txt)
fi
done
$ cat functions.sh
#!/bin/bash
function function_one {
for i in {1..100000}; do echo 1st function: $i; sleep 1; done
}
function function_two {
for i in {1..100}; do echo 2nd function: $i; sleep 1; done
}
您能告诉我上述是否可行吗? “也许”我在 bash 中遗漏了一些东西。也许有更好的方法来代替我的想法。
谢谢大家!
【问题讨论】:
-
当你尝试它时会发生什么?此外,如果 function2 运行速度很快,您最多可以在 10:00 运行 6 次,并且您在迭代之间等待 10 秒,因为您将在 10:00:00、10:00:10、10:00:20 运行