Cygwinアプリケーションの起動には、Windows 8.1 x64では1分以上かかります。 mintty
をショートカットから起動するか、cygwin.bat
またはls.exe
またはbash.exe
をbinフォルダーから起動するかは関係ありません。それらのそれぞれは遅くなります。
Bashまたはminttyが開始された後、それらはかなり迅速に動作しています。
$ time for i in {1..10} ; do bash -c "echo Hello" ; done
Hello
...
Hello
real 0m1.273s
user 0m0.060s
sys 0m1.181s
私が試した手順:
127.0.0.1 localhost cygdrive wpad
を追加しました 同じ返信のように/etc/bash_completion.d
フォルダーなし)etc/profile.d
フォルダで実行しようとしましたetc/bash.bashrc
ファイルで実行しようとしました他にどのように根本原因を見つけることができますか?
追伸-Windows 8.1 64ビットを搭載したラップトップとデスクトップの2つの異なるシステムがあります。この問題は、両方で100%再現可能です。
また、ログインしてから数秒後にBashを起動すると、すぐに起動します。
最終的には、この問題の原因を見つけましたが、その理由はまだわかりません。 Cygwinは、同じ環境の他の人々に非常にうまく機能します。
原因:すべてのCygwinアプリケーションの起動時に、etc/nsswitch.conf
ファイルに記述されているとおり、資格情報を取得しようとします。何らかの理由で、アカウントがLDAP経由で複数のActive Directoryドメインコントローラーと通信するため、アカウントに時間がかかります。
解決策1:現在のユーザーとグループをetc/passwd
およびetc/group
ファイルに保存し、Cygwinを設定してActive Directoryの前にそれらをチェックできます。
mintty.exe
を起動し、開くまで待ちますmkpasswd -c
を実行し、その出力をetc/passwd
ファイルに保存します(作成する必要があります。出力は1行である必要があります)mkgroup -c
を実行し、その出力をetc/group
ファイルに保存します(作成する必要があります。出力は1行である必要があります)etc/nsswitch.conf
を開いて書き込みますnsswitch.confの内容:
passwd: files # db
group: files # db
これで、Cygwinがすぐに起動するはずです。
解決策2:Cygwinに付属の特別な CygServer アプリケーションがあり、NTサービスまたは単純なプロセス(usr/sbin/cygserver.exe
を実行するだけ)として開始できます。資格情報をキャッシュし、次のすべてのCygwinプロセスに伝播しますcygserverの実行中。
これをスタートアップに追加するか、Cygwinセッションの前に起動してください。cygserverの起動には時間がかかりますが、次のすべてのCygwinプロセスはすぐに開始されます。
それはあなたのケースですか?私の調査手順を共有したいので、あなたのケースが私のものと同じかどうかを確認できます。
mintty
を起動すると、netmonに接続が表示されます。 mintty
接続のリストが表示され、右側にTCPとLDAPフレームがあります。これらの接続を選択すると、接続が表示されます。nbtstat -a 8.8.8.8
を実行します(8.8.8.8をnetmonのIPアドレスの1つに置き換えます)。さらに深く:etc/nsswitch.conf ファイルを使ってローカルの資格情報またはキャッシュされた資格情報を取得して、cygserverなしで高速に実行できるようにします。しかし、まだ運はありません。
これが私のために働いたものです。
Cygwinターミナルを起動して、次の2つの文字列を実行します。
mkpasswd -c > /etc/passwd
mkgroup -c > /etc/group
「/etc/nsswitch.conf」ファイルを編集して、次の2行を含めます。
passwd: files # db
group: files # db
Cygwinを再起動します。
Cygwinはすぐに開きます。
大きなADディレクトリを持つネットワーク上にいる場合、mkpasswdには多くの時間がかかります(私の場合は数日)。使用を検討してください:
mkpasswd -c -l > /etc/passwd
mkgroup -c -l > /etc/group
-l,--local [machine] Print local user accounts of \"machine\",
from local machine if no machine specified.
Automatically adding machine prefix for local
machine depends on settings in /etc/nsswitch.conf.
「C:\ cygwin64\bin」をパスに追加するとうまくいきました。