当另一个任务完成时Linux计划任务

Posted

技术标签:

【中文标题】当另一个任务完成时Linux计划任务【英文标题】:Linux schedule task when another is done 【发布时间】:2013-01-16 21:43:27 【问题描述】:

我有一个当前正在运行的任务/进程。我想安排另一个任务在第一个任务完成后开始。

如何在 linux 中做到这一点?

(我不能停止第一个,并创建一个脚本来开始一个接一个的任务)

【问题讨论】:

任务是否相关? (我打赌他们是)他们可以合作吗?它们是否来自同一个用户标识?是 cron 作业,还是从交互式会话开始? 不相关,无法合作,来自同一个用户ID,第一个从交互式会话开始,第二个...推荐 razvan,在这种情况下,“推荐”是什么意思? 回答的人推荐 所以...如果我的回答符合您的需求,您可以接受吗? :) 【参考方案1】:

有些微不足道的规格,但类似于

watch -n 1 'pgrep task1 || task2'

或许能胜任。

【讨论】:

【参考方案2】:

你想要等待

手册第 2 节中的系统调用,它的变体之一,如 waitpid 或专门为此目的设计的内置 shell。


shell 内置更自然一点,因为这两个进程都是 sell 的子进程,所以你可以编写如下脚本:

#!/bin/sh
command1 arguments &
wait 
command2 args

要使用系统调用,您必须编写一个 fork 程序,在子进程中启动第一个命令,然后在执行第二个程序之前 waits。

wait (2) 的手册页说:

wait() 和 waitpid() wait() 系统调用暂停当前进程的执行,直到其子进程之一终止。调用 wait(&status) 等价于:

      waitpid(-1, &status, 0);

waitpid() 系统调用暂停当前进程的执行,直到一个子进程 pid 参数指定的状态已更改。

【讨论】:

如果可以,为什么要分叉并等待command1 arguments; command2 args 不同的上下文。一个是编译程序(比如 c 或 c++),而另一个是 shell 脚本。无论如何,shell在运行command1 forkexec时所做的事情,然后wait内置调用wait系统调用,所以它等于事情。

以上是关于当另一个任务完成时Linux计划任务的主要内容,如果未能解决你的问题,请参考以下文章

Linux计划任务(转载)

十七linux系统的任务计划

Linux系统任务计划和系统服务管理

Linux计划任务.md

计划任务管理

Linux系统的任务计划