这个问题之前已经被提出并且有很多答案,但我的需求比较特殊:
- 我需要运行的进程都是长时间运行的进程,不会正常结束。
- 我不想仅仅在后台运行它们,因为我需要看到它们的输出。
- 如果其中任何一个进程退出,我希望其余的进程也能自动终止。
- 如果我在主命令上使用Ctrl+C或其他信号,我希望杀死所有进程。
例如,使用&
+ wait
无法满足最后一点。GNU parallel似乎相当复杂,并且可能能够做到这一点,但我找不到一个好的例子如何使用它。
经过一段时间的尝试,GNU parallel
看起来可以按照我所需工作。
将需要运行的脚本添加到 Makefile 中,以使其能够使用 make consume
,make project
和 make run
命令。
现在我可以像这样并行运行它们:
parallel --ungroup --halt now,success=1,fail=1 make ::: consume project run
通过使用--ungroup
参数,我可以看到输出结果并且杀死进程也能正常工作。与我最初发布的帖子唯一的区别是当一个程序结束时其他程序没有被终止。但这并不重要。
make -j
命令并行运行 make 任务。 - John Kugelman--halt now,success=1,fail=1
is not supported. You probably want --halt now,done=1
- Ole Tange--linebuffer
而不是--ungroup
。这样,您可以确保从每个作业中获取完整的行,而不会看到半行的混合。 - Ole Tange--halt now,done=1
不起作用:parallel: Error: --halt now 必须跟着 ,success 或者 ,fail.
- enumagsystemctl status <service>
和 journalctl
这样的命令提供了许多查看和搜索日志数据的方法。您可以按严重级别或时间等许多元数据字段进行过滤。您可以查看单个服务的输出,也可以查看多个服务的组合输出。你可以使用如果我在运行它们的主命令上使用Ctrl+C或其他信号,我想杀死所有进程。
systemctl stop <service>
停止服务。它会停止指定的服务及其依赖项。你可以使用 xargs -P0
-P max-procs, --max-procs=max-procs 一次最多运行max-procs个进程;默认值为1。如果max-procs为0,则xargs将尽可能地运行尽可能多的进程。使用-n选项或-L选项与-P一起使用;否则只有一个exec将被执行的机会。在xargs运行时,您可以向其进程发送SIGUSR1信号以增加同时运行的命令数,或者发送SIGUSR2以减少数量。您不能将其增加到超过实现定义的限制(该限制显示在--show-limits中)。您不能将其减少到1以下。xargs永远不会终止其命令;当要求减少时,它只是等待超过一个现有命令终止后再启动另一个。
make consume
、make project
和make run
。我找不到如何使用parallel来实现这一点。另外,parallel --halt
是什么鬼?--halt
在parallel --help
中没有列出... - enumag