Windows 10 と cygwin のハングアップ問題

Windows 10 と cygwin のハングアップ問題

Windows 10 の cygwin から対話型プログラム (たとえば、mysql) を実行すると、入力がそのまま停止し、何も実行されません。Ctrl + C で終了すると、入力がコンソールに送信されていることを確認できます。

他の対話型プログラム (pry、irb) からも奇妙な結果が見られます - Windows 7 ではすべて正常に動作していました。

これを見た人は解決したでしょうか?

答え1

strace がセグメント違反を起こしている場合、最も可能性の高い原因はウイルス対策です。

この問題を引き起こしている最新のものはマイクロトレンドである。

https://cygwin.com/ml/cygwin/2016-08/msg00092.html

先月、この件に関する報告がいくつかあった。

答え2

cygwin 環境では、Linux コマンド 'strace' が使用できます。strace は、OS <--> アプリケーション間のすべてのやり取り (この場合は、アプリケーション <--> cygwin <--> OS) を出力し、フリーズしている特定のシステム コールまたはその他の操作が明らかになります。

strace を使用するには、デバッグするアプリケーションを起動するコマンドの前に strace コマンドを追加するだけです。たとえば、コマンドを使用して cygwin ターミナルから mysql を起動する場合はmysql、代わりに として呼び出しますstrace mysql

フリーズしているプログラムで strace を実行しても出力が明確でない場合は、出力を pastebin または同等の場所に投稿してください (回答に追加しないでください。膨大な量のテキストになります)。

次のステップは、gdb などのデバッガーで実行することですが、このような場合には通常、strace で十分です。

アップデート

どうやら、ここ数か月で strace の cygwin ポートにバグが導入されたようです。Google で「cygwin strace seg fallout」と検索したところ、そのことには気付いていませんでした。strace はこの作業に最適なツールなので、cygwin インストールを更新して、修正が意図的または不注意で導入されたかどうかを確認してください。cygwin インストールを更新するには、次のコマンド シーケンスを使用します。

wget -NP /usr/local/bin/ http://cygwin.com/setup-x86_64.exe
chmod u+x /usr/local/bin/setup-x86_64.exe
/usr/local/bin/setup-x86_64.exe -n

ソース

更新後、もう一度試してください。それでもセグメント エラーが発生する場合は、gdb の使いやすさがはるかに劣り、現在私が知る限り、cygwin 環境では strace に相当するものが利用できないため、状況が少し複雑になります。

アップデートによって起動の問題が解決され、strace が無意味になる可能性は常にあります (可能性はそれほど高くありませんが...)

アップデート2

アップデート後にcygwin straceコマンドがセグメンテーションフォールトを起こす場合は、logger.exeなどのネイティブWindowsユーザースペースデバッガーを使用するのが最善策だと思います。インストール情報は以下にあります。ここ

logger.exe は strace と同様の方法で使用されますが、問題は、実際のシステム コールではなく、プログラムのシステム コールの cygwins 翻訳が公開されることです。言い換えると、OS と cygwin のやり取りのみが調べられ、問題のあるプログラムの詳細は難読化される可能性があります。ただし、ハングまたはフリーズは、ほとんどの場合、リソース制限または応答しないシステム コールのいずれかに起因しているため、この方法ではそれが公開されます。

これは、アップデート後も機能する可能性のあるもの (strace) の代替として提供しているため、具体的な使用方法については詳しく説明しません。基本的に、(インストール後に) 行うことは、strace について説明したように、logger.exe プログラムが先頭に付いた Windows コマンド プロンプトから cygwin を呼び出すことです。対話型の cygwin ターミナルが開くので、そこから評価するプログラムを起動する必要があります。ロガー アプリケーションによって、cygwin とその子プロセス (「プログラム」) が実行している内容を説明する膨大な量のテキストが出力されるはずです。ハングが発生すると、待機している特定のシステム コールまたはリソースが明らかになります。繰り返しますが、そうでない場合は、ロガー出力の全文を投稿してください。

関連情報