任务后台处理程序可能会帮助你。
正如在freshmeat.net 中:
任务假脱机程序是一种 Unix 批处理系统,其中假脱机的任务一个接一个地运行。可以随时设置一次运行的作业数量。每个系统中的每个用户都有自己的作业队列。任务在任何 shell/进程的正确上下文(入队)中运行,并且可以轻松查看其输出/结果。当您知道您的命令依赖于大量 RAM、大量磁盘使用、提供大量输出或出于任何原因最好不要同时运行它们时,它非常有用,而您想保持您的资源忙于获得最大收益。它的界面允许在脚本中轻松使用它。
Task-spooler 在Debian、Ubuntu 和其他发行版中可用。
它让您可以运行一个任务队列,并随意访问它们的输出。
例如:
$ tsp sleep 5
0
$ tsp sleep 5
1
$ tsp
ID State Output E-Level Times(r/u/s) Command [run=1/1]
2 running /tmp/ts-out.ZWn6Le sleep 5
1 finished /tmp/ts-out.Fhlcle 0 5.00/0.00/0.01 sleep 5
Run Code Online (Sandbox Code Playgroud)
如果您在后台运行大量作业,它肯定会对您有所帮助。
您可以按顺序或在预设数量的插槽中运行它们。您也可以建立任务之间的依赖关系(运行TASK1只有task0成功完成)。
以下是如何在两者中做到这一点{ba,z}sh
。
使用函数有助于不需要通过使用来保存和恢复zsh
的monitor
变量的状态setopt local_options
。
# Run the command given by "$@" in the background
silent_background() {
if [[ -n $ZSH_VERSION ]]; then # zsh: https://superuser.com/a/1285272/365890
setopt local_options no_notify no_monitor
"$@" &
elif [[ -n $BASH_VERSION ]]; then # bash: https://stackoverflow.com/a/27340076/5353461
{ 2>&3 "$@"& } 3>&2 2>/dev/null
else # Unknownness - just background it
"$@" &
fi
}
Run Code Online (Sandbox Code Playgroud)
使用方法如下:
trap 'echo child done' CHLD
silent_background sleep 1
Run Code Online (Sandbox Code Playgroud)
将产生预期的child done
消息。