X-Recipient: archive-cygwin AT delorie DOT com X-Original-To: cygwin AT cygwin DOT com Delivered-To: cygwin AT cygwin DOT com DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A38093858D39 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=SystematicSw.ab.ca Authentication-Results: sourceware.org; spf=none smtp.mailfrom=systematicsw.ab.ca X-Authority-Analysis: v=2.4 cv=QIIL+iHL c=1 sm=1 tr=0 ts=616f1b30 a=T+ovY1NZ+FAi/xYICV7Bgg==:117 a=T+ovY1NZ+FAi/xYICV7Bgg==:17 a=IkcTkHD0fZMA:10 a=TImcKGuyeGIbufSLrCcA:9 a=QEXdDO2ut3YA:10 Subject: Re: Hanging cygwin processes in Windows Server 2019 To: cygwin AT cygwin DOT com References: <764795149 DOT 682120 DOT 1633022545890 DOT ref AT mail DOT yahoo DOT com> <764795149 DOT 682120 DOT 1633022545890 AT mail DOT yahoo DOT com> <552722739 DOT 4126571 DOT 1634558495795 AT mail DOT yahoo DOT com> <1673936147 DOT 4682792 DOT 1634666172598 AT mail DOT yahoo DOT com> From: Brian Inglis Organization: Systematic Software Message-ID: Date: Tue, 19 Oct 2021 13:23:27 -0600 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <1673936147.4682792.1634666172598@mail.yahoo.com> Content-Language: en-CA X-CMAE-Envelope: MS4xfAZYrK/o5+dtgdhQo0FnxvtfxubGzWr/ZoQt5K9981dgOUJ+7C0Q66ml9nz1/gaqhJSeOriHjGaj5XvSD9o1E6hWt3YWCDWX1Qs21gSo73Wj9B5l2qKU NxvQV7axL0O6ZjfDHEBO5jNGgphgvdyYci1mVLWwDY7NsdR4hYo169dYz0H1yqErvG8YrIdd1Ng1PyNy+mp9/h84n4aHS2j/SH+uy1dmeXnURU08cJLlt5tn X-Spam-Status: No, score=-1165.8 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, NICE_REPLY_A, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=no autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: cygwin AT cygwin DOT com X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: cygwin AT cygwin DOT com Cc: "chris DOT hardison AT yahoo DOT com" Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com Sender: "Cygwin" On 2021-10-19 11:56, chris.hardison wrote: > On Tuesday, October 19, 2021, 12:11:42 PM EDT, Brian Inglis wrote: > On 2021-10-18 06:01, chris.hardison wrote: >> On Thursday, September 30, 2021, 01:26:37 PM EDT, chris.hardison wrote: >>> My cygwin install looks good and things seem to work perfectly >>> for some time (hours or days), then a cygwin process started by a >>> windows process that is usually a child process of a windows >>> service written in perl will hang and then most all other cygwin >>> processes will hang or take a very long time to return. The >>> simplest example is a call to \cygwin\bin\ps from powershell. >>> That normally returns with sub-second response time. Once the >>> problem occurs that call to \cygwin\bin\ps will often take >>> several minutes to return. I've found that killing all cygwin >>> processes will temporarily resolve the problem. >>> I've read about redirecting NUL to stdin when making the call to >>> cygwin processes from windows and that didn't seem to help. >>> I've tried "set-processmitigation -name \cygwin\bin\ps.exe >>> -disable ForceRelocateImages" with no real benefit. >>> I've also tried "\cygwin\bin\dash -c /bin/rebaseall" on startup >>> before the sshd service starts and that didn't seem to help. >>> Any suggestions on how to prevent this problem will be greatly >>> appreciated. >> The problem seems to be that my cygwin processes that are always >> the child or grandchild of a windows service use a console device >> that is block buffered rather than character buffered. So using >> mintty to start those processes forces character buffered which >> solves the problem. I'm looking for cleaner way to force character >> buffered IO. Here's an example of the change: >> From >> chomp(@output = `/cygwin/bin/ps -W`);TO >> chomp(@output = `/cygwin/bin/mintty.exe -w hide /bin/dash -c >> "/bin/ps -W > /tmp/${PID}.out"; sleep 1; type >> /cygwin/tmp/${PID}.out; del /cygwin/tmp/${PID}.out`); >> Hopefully someone can suggest a simpler solution. > Most Cygwin processes don't care about buffering, as they may be line > or character buffered from the terminal but block buffered when used > with pipe or file I/O. > Try using stdbuf(1) instead of mintty to change buffering. > You use it as a command prefix like nohup or time. > Perl may also have ways of changing I/O buffering internally. > Thanks for the feedback. I came across stdbuf earlier today and thought for sure that was the answer but when I showed it to my co-worker he said he had already tied it with no luck, both with -i0 -e0 -o0 and with -oL. > Actually, what is working is:`\\cygwin\\bin\\mintty.exe -w hide /bin/dash -c "/bin/ps -W > /tmp/${PID}.out"`; > chomp(@output = `type \\cygwin\\tmp\\${PID}.out && del \\cygwin\\tmp\\${PID}.out`); > I'm still hoping for a better solution. You use perl and Cygwin has package perl-IO-Tty which provides perl modules IO:Tty and IO::Pty. You may be able to build a solution equivalent to mintty using one or both of those modules. -- Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada This email may be disturbing to some readers as it contains too much technical detail. Reader discretion is advised. [Data in binary units and prefixes, physical quantities in SI.] -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple