【发布时间】:2018-01-29 22:09:12
【问题描述】:
在下面的 test.jl 中创建一个 output.txt 并生成一些控制台输出。控制台输出处理得很好。但是在完全创建 output.txt 之前,控制权会在 echo 之后立即返回。在 echo 和 mv 之间放置一个等待会导致无限期的等待。是否应该在不终止管道的情况下将回车传递给管道?
mkfifo pipe
sleep 1000000 > pipe &
julia <pipe >stdout.txt 2>stderr.txt &
echo "include(\"test.jl\")" > pipe
mv output.txt temp/
echo "include(\"test2.jl\")" > pipe
谢谢!
【问题讨论】:
-
您要求
julia在后台创建文件,然后立即尝试移动它。这是一个竞争条件。你需要找到一种方法来等待它。方法包括为每个实例运行一个julia实例,以便您可以等待进程退出,让程序将一些内容记录到您可以定期检查的 stdout.txt 中,猜测它需要不到 60 秒并休眠这么长,或者在完成后让test.jl自己移动文件。 -
想一想如果行为与此不同会产生什么影响,并且程序必须等待其写入的内容在下游完全处理,然后才能从写入操作中重新获得控制权——如果你是运行
find管道进入xargs rm,它无法继续找到第二个文件,直到第一个文件被完全删除。当此类处理完成时,您需要提出一套全新的流量控制结构来进行通信——您将获得什么价值?
标签: bash redirect julia named-pipes