当另一个任务完成时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 程序,在子进程中启动第一个命令,然后在执行第二个程序之前 wait
s。
wait (2)
的手册页说:
wait() 和 waitpid() wait() 系统调用暂停当前进程的执行,直到其子进程之一终止。调用 wait(&status) 等价于:
waitpid(-1, &status, 0);
waitpid() 系统调用暂停当前进程的执行,直到一个子进程 pid 参数指定的状态已更改。
【讨论】:
如果可以,为什么要分叉并等待command1 arguments; command2 args
?
不同的上下文。一个是编译程序(比如 c 或 c++),而另一个是 shell 脚本。无论如何,shell在运行command1
是 fork
和exec
时所做的事情,然后wait
内置调用wait
系统调用,所以它等于事情。以上是关于当另一个任务完成时Linux计划任务的主要内容,如果未能解决你的问题,请参考以下文章