当其他进程完成时退出 tail

当其他进程完成时退出 tail

我有

parallel --j 2 -- "sh script1" "sh script2"

登录文件的位置script1script2log1log2

我想将其更改为:

parallel --j 3 -- "sh script1" "sh script2" "tail -f log1 log2"

使用 tail 的原因是当我允许两个脚本同时在屏幕上输出时 - 输出变得一团糟并且我丢失了光标等问题 - 我几乎在每次执行后都需要重新启动终端。

但问题是,现在这将永远持续下去,我希望 tail 在 script1 和 script2 完成时退出。我怎样才能做到这一点?

答案1

这可能不是你想要的,但是怎么样:

parallel --j 2 -- "sh script1" "sh script2"; tail log1 log2

一旦这两项工作完成,您就不会等待tail这两个日志文件。

答案2

实际上,我找到了我需要做的事情:

parallel --j 2 -- "sh script1" "sh script2" &
PID=$!
tail --pid=$PID -f log1 log2

答案3

我会用多尾或者多路复用器

答案4

parallel --j 2 -- "sh script1" "sh script2" & tail -f log1 log2

parallel ...在后台运行,然后运行tail ...

按压Ctrl-C尾巴不会影响parallel工作。

如果您需要将 带到parallel前台,请杀死tail并输入fg。要将其再次发送到后台(例如,以便您可以tail再次运行),请按Ctrl-Z并键入bg。或者你可以用以下命令杀死它kill %%

有关更多详细信息,请参阅您的 shell 文档。例如,如果您使用的是 bash,请运行man bash并搜索 (all-caps) JOB CONTROL

相关内容