CAF*_*FxX 7 linux shell bash pipe
有没有办法设置 Bash(或其他 shell)脚本中定义的管道的管道容量?以例如
cmd1 | cmd2
在最近的 Linux 中,管道容量默认设置为 64KB。我知道我可以通过两种方式控制两个进程之间“缓冲”的数据量:
buffer(1):例如cmd1 | buffer | cmd2fcntl(2)与F_SETPIPE_SZ标志一起使用cmd1cmd2每种方案都有缺点:buffer只能用于增加缓冲区;还覆盖默认管道容量仍需要唤醒下游命令。fcntl,据我所知,只能从内部cmd1或cmd2.
我的问题是:有没有办法在外壳创建管道时在外壳中指定管道应该具有多少容量?
根据 DepressedDaniel 和 St\xc3\xa9phane Chazelas 的建议,我选择了我能找到的最接近 oneliner 的东西:
\n\nfunction hugepipe {\n perl -MFcntl -e \'fcntl(STDOUT, 1031, 1048576) or die $!; exec { $ARGV[0] } @ARGV or die $!\' "$@"\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这允许执行以下操作:
\n\nhugepipe <command> | <command>\nRun Code Online (Sandbox Code Playgroud)\n\n两个命令之间的管道将具有通过fcntlperl 脚本中指定的容量。