win10 的 cmd 的标准输出卡死 bug - V2EX
gouchaoer

win10 的 cmd 的标准输出卡死 bug

  •  
  •   gouchaoer Mar 29, 2017 17955 views
    This topic created in 3337 days ago, the information mentioned may be changed or developed.

    就我的经验而言,我阿里云的 win server 2012 的 powershell , win10 的 cmd 都存在标准输出卡死的问题,用 docker 的时候出现,现在我在一台 win10 的 cmd 里运行 php-cli 也存在这个 bug 。一旦卡住,你就需要切到该 cmd 中,然后按一下回车,好了。。。。

    cmd 是基础设施,这么傻逼的 bug 简直丧心病狂,而且这么一搞我的个人应用就没法跑了。。。

    win10 垃圾,我丝毫没有感受到 win10 对 win7 有什么改进,倒是一堆垃圾 feature , win7 还可以战斗 20 年!

    36 replies    2020-10-16 12:14:52 +08:00
    gouchaoer
        1
    gouchaoer  
    OP
       Mar 29, 2017
    这个 bug 怎么修呢,现在我业务没法跑啊
    jjx
        2
    jjx  
       Mar 29, 2017
    现在 windows 10 中用 git submodule foreach git pull origin master 时 也发现这个情况, 按一下回车就继续了
    gouchaoer
        3
    gouchaoer  
    OP
       Mar 29, 2017
    @jjx 我没发按回车啊,我的 cmd 程序有业务一直都在跑,这么一卡死就 stop the world forever 了。。。。。。。。为什么微软这么傻逼?这种 bug 如果说 win10 是消费者的,那为啥 win server2012 的 powershell 也存在这个问题?谁能告诉我为什么微软这么傻逼?做个系统越做越烂
    Yuwen
        4
    Yuwen  
       Mar 29, 2017 via Android
    没记错的话 win10 很早测试版上就一直存在
    laxenade
        5
    laxenade  
       Mar 29, 2017
    从来没遇到过呢 不如试试 2016 吧(逃
    webjin1
        6
    webjin1  
       Mar 29, 2017 via Android
    中文输入法导致的吗?
    wohenyingyu02
        7
    wohenyingyu02  
       Mar 29, 2017
    同样遇到,据说是选中问题

    t/345192
    Quaintjade
        8
    Quaintjade  
       Mar 29, 2017
    Bug 10 就是个一团败絮的系统,除了给小白用的基本功能,稍微高级些的功能都是各种脑残 bug ,正式版的稳定度连 beta 都达不到。

    PowerShell 参数明确指定$False 结果却是$True 这种傻缺错误都有:
    > Add-VpnConnection -Name "TestVPN" -TunnelType Ikev2 -SplitTunneling $False -PassThru
    SplitTunneling : True

    http://image18.poco.cn/mypoco/myphoto/20170327/22/5657397520170327224548078.jpg
    Osk
        9
    Osk  
       Mar 29, 2017 via Android
    感觉像一不小心点了鼠标开始选字了。按 Enter 恢复。关掉快速编辑模式试试
    21grams
        10
    21grams  
       Mar 29, 2017
    肯定是鼠标点中了吧,我一直用 win10 从来没遇到这种问题。
    VYSE
        11
    VYSE  
       Mar 29, 2017
    你需要 ConEmu 甚至干脆 Bash on Ubuntu on Windows + ConEmu
    Quaintjade
        12
    Quaintjade  
       Mar 29, 2017
    哦对了, cmd 的功能会逐渐被 PowerShell 取代,所以估计巨硬根本就懒得修 cmd 。
    比如说 netsh 的 tcp/ip 就有如下提示:

    C:\>netsh
    netsh>int
    In future versions of Windows, Microsoft might remove the Netsh functionality
    for TCP/IP.

    Microsoft recommends that you transition to Windows PowerShell if you currently
    use netsh to configure and manage TCP/IP.

    Type Get-Command -Module NetTCPIP at the Windows PowerShell prompt to view
    a list of commands to manage TCP/IP.

    Visit http://go.microsoft.com/fwlink/?LinkId=217627 for additional information
    about PowerShell commands for TCP/IP.
    weiceshi
        13
    weiceshi  
       Mar 29, 2017   1
    @Quaintjade

    如果你不熟悉一个命令的话,你可以查一下文档
    https://technet.microsoft.com/en-us/itpro/powershell/windows/vpn-client/add-vpnconnection

    Add-VpnConnection [-Name] <String> [-ServerAddress] <String> [-RememberCredential] [-SplitTunneling] [-Force]
    [-PassThru] [-ServerList <CimInstance[]>] [-DnsSuffix <String>] [-IdleDisconnectSeconds <UInt32>]
    [-PlugInApplicationID]<String> -CustomConfiguration <XmlDocument> [-CimSession <CimSession[]>]
    [-ThrottleLimit <Int32>] [-AsJob] [-WhatIf] [-Confirm] [<CommonParameters>]

    假如是 [-SplitTunneling]<Boolean>这种形式,那么才是你的用法。
    正确的用法是 如果带 -SplitTunneling 那么就是 true ,不带就是 false

    整个帖子都应该 move to [然而并没有]
    polun
        14
    polun  
       Mar 29, 2017
    貌似把"变速编辑“取消就行了。
    weiceshi
        15
    weiceshi  
       Mar 29, 2017
    @polun
    是的,关闭快速编辑后, cmd 里内容不再能被选中
    这个获取焦点后 pause 的功能,目的是有大量输出内容,快速滚屏的情况下,方便选中并复制内容
    还是那句话,整个帖子都该 move to [然而并没有]
    Quaintjade
        16
    Quaintjade  
       Mar 29, 2017 via Android
    @weiceshi
    你说的的确没错。

    然而这不是更傻缺吗?
    另一个 cmdlet Set-VpnConnection 也有-SplitTunneling ,用法却是 [-SplitTunneling] <Boolean>。明明完全相同的 parameter ,一个要带值,另一个本身就是个开关,明显是坑人。
    https://technet.microsoft.com/en-us/library/jj554823(v=wps.630).aspx

    退一步说,用法不同我也认了,但既然是开关,为什么带了值也不报错?这 TM 还是在坑人。
    gouchaoer
        17
    gouchaoer  
    OP
       Mar 29, 2017 via Android
    @weiceshi 我可是高级爬虫工程师,这种 bug 我搜遍百度都搞不定,然后你告诉我这是 feature ?
    weiceshi
        18
    weiceshi  
       Mar 29, 2017
    @gouchaoer
    https://www.google.com.hk/search?q=cmd+%E5%8D%A1%E4%BD%8F
    第一页第三条就是

    [Quote]
    cmd 窗口输出卡住的问题

    博客分类: 经验记录
    JSP
    访问一个 jsp ,该 jsp 中含有很多 System.out.println 的打印语句,某次操作突然发现控制台不输出了,有时输出有时不输出这种不确定性问题很难推断,曾一度怀疑是
    1. jetty 本身问题
    2. response.flushBuffer
    3. System.out.println
    4. System.out.println 过多
    最后一一排除,原来是鼠标点中了 cmd 窗口,导致它处于选定状态,即使最小化后又切回原系统, System.out.println 资源被占用,该语句又是单线程,所以程序流程就被卡在了这里,导致卡死状态,做一个试验,如果是在新的线程中去打印,然后选定控制台,看会不会卡住:
    [Quote end]
    gouchaoer
        19
    gouchaoer  
    OP
       Mar 29, 2017 via Android
    @weiceshi 我都说了搜遍百度搞不定的,我不用谷歌的因为谷歌太难了
    uuair
        20
    uuair  
       Mar 29, 2017
    vps 上要是用 windows 系统,如果用最低配的系统,最低的带宽, vnc 连上的时候会不会卡的要死啊?那还有体验么? windows 现在可以用 ssh 登陆了么?
    weiceshi
        21
    weiceshi  
       Mar 29, 2017   2
    @Quaintjade

    powershell 的 required 参数有个属性叫做 position ,固定参数可以免参数名
    比如 Add-VpnConnection 有两个固定参数, -Name 和 -ServerAddress 的 position 分别是 1 和 2
    那么在不指定参数名称的情况下,出现的第一个 value 被指定到 Name ,同理第二个参数被指定到 ServerAddress (假如已经指定了 ServerName 的参数名,那么顺延)

    所以拿你的命令行举例:
    Add-VpnConnection -Name "TestVPN" -TunnelType Ikev2 -SplitTunneling $False -PassThru
    $False 并不是赋给了 SplitTunneling ,而是作为未指定参数名的第一个 value 出现的
    因为已经指定了 Name ,所以$False 被赋给了参数 ServerAddress
    所以你的命令行并不是 [为什么带了值也不报错] ,而是相当于: Add-VpnConnection -Name "TestVPN" -TunnelType Ikev2 -SplitTunneling -ServerAddress $False -PassThru
    如果你再添加一个未指定参数名的 value ,就会报错了,因为没有第三个 required 参数。
    所以继续然而并没有

    ps :其实这种基本知识,你用两遍就应该知道了。自己获取知识的能力对于码农来说是最重要的了
    KirkZheng
        22
    KirkZheng  
       Mar 29, 2017 via Android
    我倒是认为 win10 有很大的改进,设计哲学深得我心,各种同步。
    Quaintjade
        23
    Quaintjade  
       Mar 29, 2017
    @Quaintjade
    我自问自答一下吧。
    不报错是因为 PowerShell 里必需参数和可选参数、位置参数和命名参数的顺序可以随便混的绝赞 feature ,结果就是你以为是一个参数名+参数值的组合, PowerShell 却认为是一个无值的命名参数+一个必需参数的值(或一个可省略名称的命名参数的值)。恰好这个参数值又是字符串型的,于是$False 自动转成字符串, gg

    当然还有更倒霉的情况,例如你输了 false 而对应位置参数正好接受 boolean ,你粗扫一眼看到报错提示 boolean 值应该写$False ,然后你改成$False 就不报错了

    PS C:\> Add-VpnConnection -Name "TestVPN" -ServerAddress "1.2.3.4" -TunnelType Ikev2 -EncryptionLevel "Required" -AuthenticationMethod "eap" -SplitTunneling False -PassThru

    Add-VpnConnection : Cannot process argument transformation on parameter 'AllUserConnection'. Cannot convert value "System.String" to type "System.Management.Automation.SwitchParameter". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.
    At line:1 char:150
    + ... "Required" -AuthenticationMethod "eap" -SplitTunneling False -PassTh ...
    + ~~~~~
    Quaintjade
        24
    Quaintjade  
       Mar 29, 2017
    @weiceshi
    已经发现了,然而同样是巨硬家的 C#就不允许这种参数顺序混乱的 feature 。
    https://msdn.microsoft.com/en-us/library/dd264739.aspx

    另外技术文档依然继续坑人,比如告诉你的 synopsis 是:
    Add-VpnConnection [-Name] <String> [-ServerAddress] <String> [[-TunnelType] <String>] [-AllUserConnection]
    [-RememberCredential] [-SplitTunneling] [-Force] [-PassThru] [[-L2tpPsk] <String>] [-UseWinlogonCredential]
    [-ServerList <CimInstance[]>] [-DnsSuffix <String>] [-IdleDisconnectSeconds <UInt32>]
    [[-EapConfigXmlStream] <XmlDocument>] [[-AuthenticationMethod] <String[]>] [[-EncryptionLevel] <String>]
    [-MachineCertificateIssuerFilter <X509Certificate2>] [-MachineCertificateEKUFilter <String[]>]
    [-CimSession <CimSession[]>] [-ThrottleLimit <Int32>] [-AsJob] [-WhatIf] [-Confirm] [<CommonParameters>]

    你看到有三个参数的顺序是 -AllUserConnection ,-AuthenticationMethod ,-EncryptionLevel
    然而你只有查看了具体的 position 属性之后才会发现它们的顺序其实是 -EncryptionLevel(4), -AuthenticationMethod(5), -AllUserConnection(7)


    是的,你可以主张这都是 feature ,而且你都写了文档了。然而这些都是违反基本知识(或者说常识)的坑,说白了还是 MDZZ 。
    我哪天写个命令的参数,名称叫 -EnableX ,实际上用处却是禁用 X ,并且在详细文档中正确地注明用处就是禁用,那么那些上当的人都是自己不看文档的错对吧?
    manhere
        25
    manhere  
       Mar 29, 2017 via Android
    一直用管道方式执行,未发现这个问题
    gouchaoer
        26
    gouchaoer  
    OP
       Mar 29, 2017 via Android
    @uuair 那种 adsl 拨号的 vps 就是,基本 xp 和 win7 系统,不会卡
    weiceshi
        27
    weiceshi  
       Mar 29, 2017 via Android
    @Quaintjade
    不要打滚了,错就错了好不好。
    微软给小白用户准备了 powershell ise , cortana 里直接搜就有,打开后右边窗口搜索命令,然后可视化编辑参数,勾勾点点然后点执行就好,绝不出错。
    ragnaroks
        28
    ragnaroks  
       Mar 29, 2017
    我在 ise 里面确实没遇到过问题,主要是 cmd-let 太多了,记不住,猜也经常猜错
    @weiceshi #27
    jsq2627
        29
    jsq2627  
       Mar 29, 2017   1
    1. 终端和 shell 要区分看来看。 cmd 和 powershell 是 shell ,那个难用的窗口是终端,吐槽 win 命令行难用的大都是吐槽终端难用。
    2. 楼主提的问题,熟悉 win 的人一眼就知道是鼠标点了某个地方选中了文本。右键窗口标题,属性,把快速编辑模式关掉就能避免这个问题。
    3. powershell 的设计哲学和 Linux 下的 shell 非常不一样,配合好一点的编辑器或者 IDE 会写的很爽,直接在终端敲是很幸苦很容易出错的。
    4. 受不了原生 conhost 可以试试 conemu 或者 cmder ,做了很多改进,再不行还有 cygmin/MSYS minty 能用。看楼主的需求是服务器应用,那正确的做法是安装成 windows service 来跑。
    5. 楼主感受不到 win10 相比 win7 对开发者有什么变化,是因为没有进行 windows / .net 相关的开发。对于一个 windows 平台上的开发者相信也是感受不到 Ubuntu 16.04 和 14.04 有什么区别的。
    6. windows 是比 *nix 更难掌控的一个平台,有问题勿喷,尝试了解它的哲学,有 bug 去反馈,觉得自己牛那就造轮子来改善这个世界。何必发牢骚,自己不爽,看了的人也不爽。
    Quaintjade
        30
    Quaintjade  
       Mar 29, 2017
    @weiceshi
    powershell ise 直接新建一个.ps1 文件,然后右键 edit 就有。我一般直接编辑命令 /参数,用 tab 自动完成。

    你说我不看文档理解错了,这没问题,我承认。然而我并没有打滚。
    我说过了微软大可以搞各种 ZZ 的反常识的 feature ,并在技术文档里详细地描述这些 feature ,然而 ZZ 就是 ZZ 。常识本该可以节省学习时间,而不该花更多时间去学习反常识的所谓“基本知识”、重新踩各种基本的坑。
    Quaintjade
        31
    Quaintjade  
       Mar 29, 2017
    @jsq2627
    我想说我上面犯的错就是因为我把.Net 和查阅 MSDN 的习惯想当然地套用到 PowerShell 上,于是就掉坑了……
    xrlin
        32
    xrlin  
       Mar 29, 2017 via iPhone
    以前也很头疼这个问题,貌似设置下终端关闭快速编辑模式就可以解决
    lazycat
        33
    lazycat  
       Mar 30, 2017 via Android
    感觉这是高级爬虫工程师被黑的最惨的一次
    vvv123
        34
    vvv123  
       Jun 3, 2017
    @gouchaoer #17 “高级爬虫工程师”是楼主自封的吗?你搞程序不用谷歌,搞毛啊。百度只是全球最大的中文搜索引擎,而程序是洋人发明的,像你这么“高端”的问题百度能解决就奇怪了。
    当年我为了搜索一个基本的 Win32 问题,百度搜出来的结果相当少,主要都是国内网站。可是 E 文类似的问题已经问过很多遍了,用国外搜索引擎搜索都一大堆,而且针对性很强。
    gouchaoer
        35
    gouchaoer  
    OP
       Jun 3, 2017 via Android
    @vvv123 我是国内少有的高级爬虫开发工程师,看我 offer:

    英语太难了,翻墙太难了,为什么你们能把那么难的工具用的那么舒服丫?

    “程序是洋人发明的”,既然英语那么好那你一定喜欢混 hacker news、reddit programming 咯,干嘛上 v2ec 中文社区丫
    fangxing204
        36
    fangxing204  
       Oct 16, 2020
    Quick edit mode?
    About     Help     Advertise     Blog     API     FAQ     Solana     2925 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is poweed by solitude
    VERSION: 3.9.8.5 84ms UTC 13:08 PVG 21:08 LAX 06:08 JFK 09:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86