如何在不中断正在运行的作业的情况下终止GNU并行?

时间:2017-07-17 15:18:08

标签: linux bash process parallel-processing gnu-parallel

我正在运行一堆shell脚本,比如 parallel -a my_scripts bash 在某些时候,我决定我已经运行了足够多的工作,并希望停止产生新工作,并简单地让所有现有的工作完成。换句话说,我想杀死父进程而不杀死孩子。

似乎有ways of controlling termination when first launching GNU parallel(例如,如果我事先知道我只想运行x个工作,那么我可以使用--halt now,success=x参数),但我无法做到这一点。找到如何在GNU并行运行时控制它。

当然,我只能CTRL+C杀死并行,并重新运行已中止的作业,但我认为可能有更聪明的方法。

1 个答案:

答案 0 :(得分:7)

我明白了。答案是简单地将SIGTERM发送到父parallel进程(仅kill其PID将执行)。 parallel然后响应以下内容(在这种情况下我运行了4个作业):

parallel: SIGTERM received. No new jobs will be started.
parallel: Waiting for these 4 jobs to finish. Send SIGTERM again to stop now.

我把它挖出了手册页:

  

完成运行工作,但不要开始新工作
  如果你后悔   开始很多工作你可以简单地打破GNU并行,但如果你   我想确保你没有半完成的工作   将信号SIGTERM发送到GNU parallel:

     

killall -TERM parallel

     

这将告诉GNU并行不启动任何新工作,但等待   直到当前正在运行的作业完成后才退出。