Linux内核升级破坏了命名pipe道

在Linux内核升级之后,我们注意到了命名pipe道的变化。 使用来自http://www.linuxjournal.com/content/using-named-pipes-fifos-bash的脚本,我们能够复制这个问题。 脚本工作

Linux TEST05 3.13.0-55-generic #94-Ubuntu SMP Thu Jun 18 00:27:10 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 

但是请继续

 Linux TEST01 3.13.0-65-generic #106-Ubuntu SMP Fri Oct 2 22:08:27 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 

命名pipe道的工作方式似乎有所不同。 那是有意的还是不是?

我们将这两个脚本捕获为pipe_reader.sh:

 #!/bin/bash pipe=/tmp/testpipe trap "rm -f $pipe" EXIT if [[ ! -p $pipe ]]; then mkfifo $pipe fi while true do if read line <$pipe; then if [[ "$line" == 'quit' ]]; then break fi echo $line fi done echo "Reader exiting" 

和pipe_writer.sh:

 #!/bin/bash pipe=/tmp/testpipe if [[ ! -p $pipe ]]; then echo "Reader not running" exit 1 fi if [[ "$1" ]]; then echo "$1" >$pipe else echo "Hello from $$" >$pipe fi 

有没有修复?

编辑:

我们正在自己的terminal中运行每个脚本。 他们认为写作者脚本从不存在,读者脚本从不显示正常的“Hello from …”输出。 我们在两个内核版本下都以相同的方式执行它们,所以这不是一次运行一个脚本或其他任何程序差异的问题。

我没有足够的名声写评论,所以写作答案。

你是什​​么意思挂? 在其他terminal执行pipe_reader.shpipe_writer.sh会发生什么?

另外,在执行这两个脚本之后,命令是什么:

 ls -al /proc/$(pgrep pipe_reader.sh)/fd 

显示?

也许你已经跑了几个.pipe_reader脚本,所以只有第一个接收pipe_writer输出? 确保

 ps aux | grep pipe_reader | grep -v grep | wc -l 

返回1

从我所了解的3.13.0-55和3.13.0-65都是相同的内核(3.13)与分发提供商的一些修补程序/补丁。 这种升级不太可能会改变pipe道function。 我相信打破这样的function将会被内核开发者所诟病。

还有其他事情正在发生。