我有很多工作应该同时进行。
每项工作都有其后遗症。
后续作业应逐个运行。
只有完成作业后,才能启动后续作业。
第一个完成的作业应立即调用其后续作业。
所有其他作业完成后应将其后续作业放入队列。
我正在尝试将后续作业与任务假脱机程序(TSP)一起放入队列。
但是,我不知道如果工作完成了该怎么做。

#!/bin/bash
# Starting jobs and collecting their pids
job1 & job1_pid=$! &
job2 & job2_pid=$1 &
job3 & job3_pid=$1

# Catching if jobs are finished and put the afterjobs in queue
{wait $job1_pid && tsp afterjob1} &
{wait $job2_pid && tsp afterjob2} &
{wait $job3_pid && tsp afterjob3}

最佳答案

一个简单的方法是在作业执行后立即链接后续作业的队列:

job1 && tsp afterjob1 &
job2 && tsp afterjob2 &
job3 && tsp afterjob3 &

此操作将仅在其对应的作业成功执行后执行(向环境返回0值)。如果您希望始终执行后续工作,则应使用(感谢matthewstory的建议):
{ job1; tsp afterjob1 } &
{ job2; tsp afterjob2 } &
{ job3; tsp afterjob3 } &

关于linux - bash :如果工作完成就 catch ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51146904/

10-11 16:32