我当前正在运行一个任务/进程。 我想安排另一个任务在第一个任务完成后开始。
如何在 Linux 中做到这一点?
(我无法停止第一个任务,并创建一个脚本来依次启动一个任务)
规格有些微薄,但与
类似watch -n 1 'pgrep task1 || task2'
可能可以完成这项工作。
你想要等待。
手册第 2 节中的系统调用,它的变体之一,如
waitpid
或专门为此目的设计的 shell 内置函数。
shell 内置函数更自然一些,因为这两个进程都是 sell 的子进程,因此您编写如下脚本:
#!/bin/sh
command1 arguments &
wait
command2 args
要使用系统调用,您必须编写一个程序来分叉,在子程序中启动第一个命令,然后在执行第二个程序之前
wait
。
wait (2)
的手册页说:
wait() 和 waitpid()
wait() 系统调用暂停当前进程的执行,直到其子进程之一终止。 调用 wait(&status) 相当于:
waitpid(-1, &status, 0);
waitpid()系统调用暂停当前进程的执行,直到子进程 由 pid 参数指定的状态已更改。
如果你想执行第二个任务每次第一个任务没有运行,tink建议的答案有效:
watch -n 1 'pgrep <name of task1> || <task2>'
但是,我想在
task2
完成后立即运行 task1
一次。所以我用了:
watch -n 1 -g 'pgrep <name of task1>'; <task2>