在正在运行的 shell 中对任务进行排队

在正在运行的 shell 中对任务进行排队

我经常启动一个长时间运行的命令,该命令绑定到 CPU、磁盘、RAM 或 Internet 连接。当它运行时,我发现我想运行类似的命令。假设下载一些大的东西。

然后我启动一个 shellwget ...1并让它运行。我可以打开另一个 shell 并运行另一个 shell wget ...2,但现在它们会争夺带宽。当我只是在正在运行的 shell 中输入第二个命令时,它将稍后执行,因为wget它不是交互式的。

有没有合理的方法可以使用 Bash 或 Fish Shell 来做到这一点?

答案1

如果您已经在前台运行,您可以使用+wget http://first暂停它,然后使用紧随其后的另一个命令将其返回到工作状态:CTRLz

fg ; wget http://second

它应该在大多数情况下都有效。

如果这种方式不可接受,您应该使用锁定文件。或者甚至只是通过ps(锁文件更好)来监视进程。

答案2

你可能会发现任务假脱机程序有帮助。

引用应用程序描述,

任务假脱机程序是一种 Unix 批处理系统,其中假脱机的任务一个接一个地运行。可以随时设置一次运行的作业量。每个系统中的每个用户都有自己的作业队列。这些任务在任何 shell/进程的正确上下文(入队上下文)中运行,并且可以轻松观看其输出/结果。

答案3

人们可以安装像 HTCondor 这样的完善的作业队列管理,然后在那里对作业进行排队。在 Debian 上,为机器上的单个用户设置它很容易。在大多数情况下,这可能是过度杀伤力。

相关内容