gpt4 book ai didi

linux - 如何在不终止正在运行的作业的情况下终止 GNU parallel?

转载 作者:IT王子 更新时间:2023-10-29 01:15:31 25 4
gpt4 key购买 nike

我正在运行一堆 shell 脚本,例如并行 -a my_scripts bash在某些时候,我决定我已经运行了足够多的任务,并且想停止产生新的工作,而只是让所有现有的工作完成。换句话说,我想在不杀死子进程的情况下杀死父进程。

好像有ways of controlling termination when first launching GNU parallel (例如,如果我事先知道我只想运行 x 作业,那么我可以使用 --halt now,success=x 参数),但我不能了解如何在 GNU 并行运行时对其进行控制。

当然,我可以通过 CTRL+C 来终止并行,并重新运行被中止的作业,但我认为可能有更聪明的方法。

最佳答案

更新:

如果你有一个新版本的并行 >= 20190322:根据@Bowi 的评论,“自 2019 年以来,它不再是 SIGTERM,而是 SIGHUP 改为:

kill -HUP $PARALLEL_PID

SIGTERM 现在终止子进程而不让他们完成。”

参见:

原答案:

我想通了。答案是简单地将 SIGTERM 发送到父 parallel 进程(只需 killing 它的 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 regretstarting a lot of jobs you can simply break GNU parallel, but if youwant to make sure you do not have half-completed jobs you shouldsend the signal SIGTERM to GNU parallel:

killall -TERM parallel

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

关于linux - 如何在不终止正在运行的作业的情况下终止 GNU parallel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45147904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com