Le démarrage d'une application Cygwin prend plus d'une minute sous Windows 8.1 x64. Peu importe, que je démarre mintty
à partir du raccourci ou cygwin.bat
Ou ls.exe
Ou bash.exe
À partir du dossier bin. Chacun d'eux sera lent.
Après le démarrage de Bash ou mintty, ils fonctionnent assez rapidement:
$ time for i in {1..10} ; do bash -c "echo Hello" ; done
Hello
...
Hello
real 0m1.273s
user 0m0.060s
sys 0m1.181s
Étapes que j'ai essayées:
127.0.0.1 localhost cygdrive wpad
Ajouté aux hôtes comme dans la même réponse/etc/bash_completion.d
)etc/profile.d
Videetc/bash.bashrc
VideSinon, comment puis-je trouver la cause première?
P.S. - J'ai deux systèmes différents, un ordinateur portable et un ordinateur de bureau avec Windows 8.1 64 bits. Ce problème est 100% reproductible sur les deux.
De plus, si je démarre Bash quelques secondes après la connexion, il démarre immédiatement.
Finalement, j'ai trouvé la cause de ce problème, mais je ne sais toujours pas pourquoi. Cygwin fonctionne très bien pour d'autres personnes dans le même environnement.
Cause: Au démarrage de chaque application Cygwin, il essaie d'obtenir les informations d'identification comme décrit dans etc/nsswitch.conf
fichier. Pour une raison quelconque, cela prend beaucoup de temps pour mon compte car il contacte plusieurs contrôleurs de domaine Active Directory via LDAP.
Solution 1: Vous pouvez enregistrer l'utilisateur et le groupe actuels dans etc/passwd
et etc/group
fichiers et paramétrez Cygwin pour les vérifier avant Active Directory.
mintty.exe
et attendez son ouverturemkpasswd -c
et enregistrez sa sortie dans etc/passwd
fichier (vous devrez le créer, la sortie doit être sur une ligne)mkgroup -c
et enregistrez sa sortie dans etc/group
fichier (vous devrez le créer, la sortie doit être sur une ligne)etc/nsswitch.conf
et écrirecontenu de nsswitch.conf:
passwd: files # db
group: files # db
Votre Cygwin devrait maintenant démarrer immédiatement.
Solution 2: Il existe une application spéciale CygServer , livrée avec Cygwin, qui peut être démarrée en tant que service NT ou en tant que simple processus (exécutez simplement usr/sbin/cygserver.exe
). Il met en cache les informations d'identification et les propage à chaque processus Cygwin suivant pendant que cygserver est en cours d'exécution.
Ajoutez-le au démarrage ou démarrez-le avant votre session Cygwin et vous êtes bon - le démarrage de cygserver prendra du temps, mais chaque prochain processus Cygwin démarrera immédiatement.
Est-ce votre cas? Je veux partager mes étapes d'enquête, afin que vous puissiez vérifier si votre cas est le même que le mien.
mintty
et vous verrez ses connexions dans netmon: mintty
dans l'arborescence à gauche et TCP et cadres LDAP à droite après avoir sélectionné l'une de ces connexions.nbtstat -a 8.8.8.8
en ligne de commande (remplacez 8.8.8.8 par l'une des adresses IP de netmon).Approfondissement: Je joue toujours avec le fichier etc/nsswitch.conf pour obtenir les informations d'identification locales ou peut-être celles en cache afin qu'il fonctionnera plus rapidement sans cygserver. Mais pas encore de chance.
Voici ce qui a fonctionné pour moi.
Lancez le terminal Cygwin, puis exécutez les deux chaînes suivantes.
mkpasswd -c > /etc/passwd
mkgroup -c > /etc/group
Modifiez votre fichier "/etc/nsswitch.conf" pour qu'il contienne les deux lignes suivantes.
passwd: files # db
group: files # db
Relancez Cygwin.
Cygwin ouvre rapidement.
Si vous êtes sur un réseau avec un grand répertoire AD, mkpasswd prendra beaucoup de temps (plusieurs jours dans mon cas). Pensez donc à utiliser:
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.
L'ajout de "C:\cygwin64\bin" au chemin a fonctionné pour moi.