linuxsteam

linuxsteam

V2EX 第 257481 号会员,加入于 2017-10-01 18:42:55 +08:00
根据 linuxsteam 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
linuxsteam 最近回复了
@linuxsteam 为啥少输出一次就不会阻塞了 的问题也不用回复了
我明白了: 因为 err 一直在写,进程没有结束 所以就阻塞了
@senninha 是的,24 楼那个我已经试过了。可以通过。。。诶 我看了两本操作系统的书 进程通信中管道章节。都没有找到大佬您说的这几个关键点😭
@senninha #27 楼请忽略。。。 这个看不看已经没有必要了😂
@haah 我想研究研究,这个源码也有在看。
@senninha #24 可以了😭
#26 谢谢大佬,进程终止才会发 eof 这个和 JDK 的 API 的 readBytes()注释对上了 😭
小弟还有两个问题
1. 请问 子进程和父进程通信时候,stdout stdin stderr 他们要开三个管道吗?还是一个管道就可以?
2.
```shell
echo "input"
for((i=0; i<10912; i++));do
# 输出到 stderr
echo "error" 1>&2
done
```shell
为啥少输出一次就不会阻塞了?
@senninha
#20
https://pastebin.com/0cVtyGCr
老哥能看看这个结果吗 这个 gdb 的资料真是太少了。。。
@senninha ```shell
#!/bin/bash

# 输出到 stdin
echo "input"
for((i=0; i<10913; i++));do
# 输出到 stderr
echo "error" 1>&2
done
```

#19 stdout 什么时候才算结束?
这个例子就一个 stdout ,
为啥还会卡在循环中?
@zmal 跟 read 没关系 他们底层都是调用 FileInputStream 的 private native int readBytes(byte b[], int off, int len)
@Bingchunmoli 解决方案我了解的。
除了这个方法 还可以把标准错误流 重定向到一个流中,这样单线程也可以
@AoEiuV020CN 谢谢大佬的讲解,我受到了大佬的点播,终于不研究是底层问题了

在网上找到了答案,是因为 readLine()没有返回 /r /n /r/n 或者 EOF
https://www.cnblogs.com/firstdream/p/8668263.html
@thetbw 在阻塞前,available()返回的是 0
我把脚本减少 for 循环次数,最后一次输出 input 的时候 avaliable()返回还是 0
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1271 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms · UTC 18:57 · PVG 02:57 · LAX 11:57 · JFK 14:57
Developed with CodeLauncher
♥ Do have faith in what you're doing.