加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:07:18 所属栏目:Linux 来源:网络整理
导读:我正在运行一堆 shell脚本 parallel -a my_scripts bash 并且在某些时候我决定我已经运行了足够多的东西并且想要停止产生新的工作,并且简单地让所有现有工作完成.换句话说,我想杀死父进程而不杀死孩子. 似乎有ways of controlling termination when first la
我正在运行一堆 shell脚本
parallel -a my_scripts bash
并且在某些时候我决定我已经运行了足够多的东西并且想要停止产生新的工作,并且简单地让所有现有工作完成.换句话说,我想杀死父进程而不杀死孩子.

似乎有ways of controlling termination when first launching GNU parallel(例如,如果我事先知道我只想运行x作业,那么我现在可以使用–halt,success = x参数),但我找不到如何控制GNU并行已经运行.

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

解决方法

我想到了.答案是简单地将SIGTERM发送到父并行进程(只是杀死它的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.

我把它挖出了手册页:

COMPLETE RUNNING JOBS BUT DO NOT START NEW JOBS
If you regret
starting a lot of jobs you can simply break GNU parallel,but if you
want to make sure you do not have half-completed jobs you should
send the signal SIGTERM to GNU parallel:

killall -TERM parallel

This will tell GNU parallel to not start any new jobs,but wait until the currently running jobs are finished before exiting.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读