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

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

如何在 linux 中做到这一点?

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

【问题讨论】:

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

标签: linux process cron task schedule


【解决方案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系统调用,所以它等于事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多