Démarrage lent de Midnight Commander


19

Existe-t-il un moyen d'empêcher l' mcouverture de 10 à 30 secondes?


1
L'avez-vous compilé avec --enable-vfs-smb? Essayez de désactiver la fonction. Semble être un problème commun avec la version 4.8.4: le démarrage de mc est très lent
Marco

2
Courez strace -r -tt -o mc.strace mcpour voir où cela prend du temps. Téléchargez le fichier de trace si vous avez besoin d'aide pour l'interpréter. Notez que le fichier de trace peut contenir des informations privées (au moins les noms de fichiers), jetez-y un œil et désinfectez-les si nécessaire avant de le télécharger.
Gilles 'SO- arrête d'être méchant'

1
eu le même problème, a ajouté le nom d'hôte à / etc / hosts (comme 127.0.0.1, bien sûr), tout est devenu parfait

Réponses:


5

Ça marche pour moi maintenant. j'utilise

GNU Midnight Commander 4.8.21

strace attendre longtemps

connect(3, {sa_family=AF_INET, sin_port=htons(6011),
  sin_addr=inet_addr("x.x.x.x")}, 16) = ? ERESTARTSYS
  (To be restarted if SA_RESTART is set)' 

J'ai essayé ceci:

# hostname

utilisez-le pour /etc/hosts:

nameofhost=hostname

ajoutez ceci $nameofhostà la /etc/hostsligne commençant par

127.0.0.1 localhost ... $nameofhost 

À votre santé!


12

l' intégration mc / subshell est un coupable fréquent; pour vérifier, essayez:

alias mc="mc --nosubshell"

1
C'était la seule solution qui fonctionnait pour moi. Je peux voir que j'ai accès à cmd-o, mais je ne peux taper aucune commande.
Panayotis

ne fonctionne pas pour moi
stiv

10

En fait, l'édition de / etc / hosts a résolu le problème pour moi.
Mon mc a mis 10 secondes à démarrer en raison du fait qu'au démarrage mc essaie de résoudre le nom d'hôte local en une adresse IP.
J'ai ajouté à / etc / hosts la ligne suivante (mon nom d'hôte est FOO) 127.0.0.2 FOO.domain FOO qui a instantanément résolu le problème.


Pourquoi avez-vous utilisé 127.0.0.2mais pas 127.0.0.1?
Dims

tout x, y, z dans 127.xyz fonctionnera également bien (toute la plage IP est réservée à la machine locale)
ggpp23

5

Vérifier

host `hostname`

obtenir un résultat rapide

MC utilise d'abord le nom d'hôte pour se connecter au service interne

Dans une situation similaire sur Fedora 18, j'ajoute une valeur de nom d'hôte à / etc / hosts et cela aide.


service interne mc? peut-être que nous pourrions changer une configuration pour corriger mc afin de ne pas avoir à changer / etc / hosts ou est-ce que / etc / hosts est cassé et mc s'attend à ce qu'il soit corrigé?
Aquarius Power

oh, je viens de découvrir que cela fonctionne ici:alias mc='TERM=linux mc'
Aquarius Power

Vraiment / etc / hosts est cassé, d'un certain point de vue. Impossible de résoudre son propre nom d'hôte pour posséder son IP. Je ne sais pas pourquoi mc en dépend.
mmv-ru

1
Qu'entendez-vous par host 'hostname'? Il retourne le même que host 'aaaa', host 'aaab'et la liste sans fin des hôtes non-existants. Yoy signifie-t-il que MC essaie de résoudre l'hôte inexistant?
Dims

Désolé, l'apostrophe doit être là à la place des guillemets simples. Réponse fixe. D'une certaine manière, oui. MC établit la connexion à son propre serveur par votre nom d'hôte, afin qu'il obtienne un hôte inexistant et fasse de nombreux essais.
mmv-ru

4

Il peut démarrer lentement car il démarre un sous-shell (affiché lorsque vous appuyez sur Ctrl-O) et affiche l'interface utilisateur uniquement lorsque le sous-shell a démarré. J'utilise zsh et j'ai remarqué que lorsque je supprime mon ~/.zshrcfichier, mc démarre instantanément.


2
Voir midnight-commander.org/ticket/3580 pour une amélioration possible en lançant le sous-shell en arrière-plan.
Aleb

Donc, il faut le recompiler?
Panayotis

3

Il a fallu environ 10 secondes pour démarrer mc. Courir strace -r -tt -o mc.strace mcj'ai eu:

...
 0.000023 pipe([7, 8])              = 0
 0.000028 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fcad000fa50) = 3332
 0.000247 write(5, " PROMPT_COMMAND=${PROMPT_COMMAND"..., 75) = 75
 0.000050 rt_sigaction(SIGINT, {0x449960, [], SA_RESTORER, 0x7fcaced23740}, NULL, 8) = 0
 0.000034 select(8, [5 7], NULL, NULL, {10, 0}) = 1 (in [5], left {9, 999996})
 0.000039 read(5, " PROMPT_COMMAND=${PROMPT_COMMAND"..., 128) = 76
 0.000032 select(8, [5 7], NULL, NULL, {9, 999996}) = 1 (in [5], left {9, 985005})
 0.015050 read(5, "[yuri@yuri ~]  PROM", 128) = 19
 0.000031 select(8, [5 7], NULL, NULL, {9, 985005}) = 1 (in [5], left {9, 985001})
 0.000036 read(5, "PT_COM", 128)    = 6
 0.000026 select(8, [5 7], NULL, NULL, {9, 985001}) = 1 (in [5], left {9, 984998})
 0.000033 read(5, "MAND=", 128)     = 5
 0.000026 select(8, [5 7], NULL, NULL, {9, 984998}) = 1 (in [5], left {9, 984995})
 0.000033 read(5, "${PR", 128)      = 4
 0.000025 select(8, [5 7], NULL, NULL, {9, 984995}) = 1 (in [5], left {9, 984992})
 0.000034 read(5, "OMPT", 128)      = 4
 0.000025 select(8, [5 7], NULL, NULL, {9, 984992}) = 1 (in [5], left {9, 984989})
 0.000034 read(5, "_COM", 128)      = 4
 0.000026 select(8, [5 7], NULL, NULL, {9, 984989}) = 1 (in [5], left {9, 984986})
 0.000034 read(5, "MAND", 128)      = 4
 0.000025 select(8, [5 7], NULL, NULL, {9, 984986}) = 1 (in [5], left {9, 984983})
 0.000033 read(5, ":+$", 128)       = 3
 0.000025 select(8, [5 7], NULL, NULL, {9, 984983}) = 1 (in [5], left {9, 984980})
 0.000033 read(5, "PRO", 128)       = 3
 0.000025 select(8, [5 7], NULL, NULL, {9, 984980}) = 1 (in [5], left {9, 984977})
 0.000033 read(5, "MPT", 128)       = 3
 0.000025 select(8, [5 7], NULL, NULL, {9, 984977}) = 1 (in [5], left {9, 984974})
 0.000033 read(5, "_CO", 128)       = 3
 0.000025 select(8, [5 7], NULL, NULL, {9, 984974}) = 1 (in [5], left {9, 984971})
 0.000033 read(5, "MMA", 128)       = 3
 0.000026 select(8, [5 7], NULL, NULL, {9, 984971}) = 1 (in [5], left {9, 984968})
 0.000032 read(5, "ND;", 128)       = 3
 0.000025 select(8, [5 7], NULL, NULL, {9, 984968}) = 1 (in [5], left {9, 984965})
 0.000033 read(5, " }", 128)        = 2
 0.000026 select(8, [5 7], NULL, NULL, {9, 984965}) = 1 (in [5], left {9, 984962})
 0.000033 read(5, "'pw", 128)       = 3
 0.000025 select(8, [5 7], NULL, NULL, {9, 984962}) = 1 (in [5], left {9, 984959})
 0.000033 read(5, "d>", 128)        = 2
 0.000026 select(8, [5 7], NULL, NULL, {9, 984959}) = 1 (in [5], left {9, 984956})
 0.000032 read(5, "&8;", 128)       = 3
 0.000026 select(8, [5 7], NULL, NULL, {9, 984956}) = 1 (in [5], left {9, 984953})
 0.000032 read(5, "ki", 128)        = 2
 0.000025 select(8, [5 7], NULL, NULL, {9, 984953}) = 1 (in [5], left {9, 984950})
 0.000033 read(5, "ll ", 128)       = 3
 0.000026 select(8, [5 7], NULL, NULL, {9, 984950}) = 1 (in [5], left {9, 984947})
 0.000032 read(5, "-S", 128)        = 2
 0.000025 select(8, [5 7], NULL, NULL, {9, 984947}) = 1 (in [5], left {9, 984944})
 0.000033 read(5, "TO", 128)        = 2
 0.000025 select(8, [5 7], NULL, NULL, {9, 984944}) = 1 (in [5], left {9, 984941})
 0.000033 read(5, "P ", 128)        = 2
 0.000025 select(8, [5 7], NULL, NULL, {9, 984941}) = 1 (in [5], left {9, 984938})
 0.000033 read(5, "$$", 128)        = 2
 0.000033 select(8, [5 7], NULL, NULL, {9, 984938}) = 1 (in [5], left {9, 984935})
 0.000034 read(5, "'\r\n", 128)     = 3
 0.000025 select(8, [5 7], NULL, NULL, {9, 984935}) = 1 (in [5], left {9, 984886})
 0.000082 read(5, "bash: PROMPT_COMMAND: line 1: sy"..., 128) = 128
 0.000033 select(8, [5 7], NULL, NULL, {9, 984886}) = 1 (in [5], left {9, 984882})
 0.000071 read(5, "tory -r; ; pwd>&8;kill -STOP $$'"..., 128) = 48
 0.000061 select(8, [5 7], NULL, NULL, {9, 984882}) = 0 (Timeout)
 9.995037 rt_sigaction(SIGINT, {SIG_IGN, [], SA_RESTORER, 0x7fcaced23740}, NULL, 8) = 0
 0.000090 write(1, "\33[?1001s\33[?1002h\33[?1006h", 24) = 24
 0.000066 write(1, "\33[?2004h", 8) = 8
 0.000034 geteuid()                 = 1000
 0.000064 access("/home/yuri/.config/mc/filehighlight.ini", R_OK) = -1 ENOENT (No such file or directory)
 0.000061 access("/etc/mc/filehighlight.ini", R_OK) = 0
 0.000042 access("/etc/mc/filehighlight.ini", R_OK) = 0
 0.000044 stat("/etc/mc/filehighlight.ini", {st_mode=S_IFREG|0644, st_size=1119, ...}) = 0
 0.000035 open("/etc/mc/filehighlight.ini", O_RDONLY) = 9
...

En regardant cette sortie, j'ai décidé de commencer mcavec empty PROMPT_COMMAND( PROMPT_COMMAND= mc), et cela a commencé instantanément. J'avais là soi-disant commun:

history -a; history -c; history -r;

UPD Après quelques recherches supplémentaires, il s'avère que cela n'a rien à voir avec l'histoire ( PROMPT_COMMAND=';' strace -r -tt -o mc.strace -s 1000 mc):

 0.000197 write(5, " PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'pwd>&8;kill -STOP $$'\n", 75) = 75
 0.000068 rt_sigaction(SIGINT, {0x449960, [], SA_RESTORER, 0x7f12567fc660}, NULL, 8) = 0
 0.000049 select(8, [5 7], NULL, NULL, {10, 0}) = 1 (in [5], left {9, 999996})
 0.000055 read(5, " PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'pwd>&8;kill -STOP $$'\r\n", 128) = 76
 0.000050 select(8, [5 7], NULL, NULL, {9, 999996}) = 1 (in [5], left {9, 981008})
 0.019073 read(5, "bash: PROMPT_COMMAND: line 0: syntax error near unexpected token `;'\r\nbash: PROMPT_COMMAND: line 0: `;'\r\n", 128) = 105
 0.000041 select(8, [5 7], NULL, NULL, {9, 981008}) = 1 (in [5], left {9, 980786})
 0.000292 read(5, "[\33[1;30myuri\33[0m@\33[1;33myuri\33[0m ~]  PROM", 128) = 41
 0.000070 select(8, [5 7], NULL, NULL, {9, 980786}) = 1 (in [5], left {9, 980782})
 0.000075 read(5, "PT_COMMAN", 128) = 9
 0.000061 select(8, [5 7], NULL, NULL, {9, 980782}) = 1 (in [5], left {9, 980778})
 0.000058 read(5, "D=${PRO", 128)   = 7
 0.000047 select(8, [5 7], NULL, NULL, {9, 980778}) = 1 (in [5], left {9, 980775})
 0.000059 read(5, "MPT_CO", 128)    = 6
 0.000048 select(8, [5 7], NULL, NULL, {9, 980775}) = 1 (in [5], left {9, 980772})
 0.000058 read(5, "MMAND", 128)     = 5
 0.000047 select(8, [5 7], NULL, NULL, {9, 980772}) = 1 (in [5], left {9, 980768})
 0.000056 read(5, ":+$P", 128)      = 4
 0.000047 select(8, [5 7], NULL, NULL, {9, 980768}) = 1 (in [5], left {9, 980764})
 0.000057 read(5, "ROMPT", 128)     = 5
 0.000047 select(8, [5 7], NULL, NULL, {9, 980764}) = 1 (in [5], left {9, 980761})
 0.000056 read(5, "_COM", 128)      = 4
 0.000047 select(8, [5 7], NULL, NULL, {9, 980761}) = 1 (in [5], left {9, 980758})
 0.000057 read(5, "MAND", 128)      = 4
 0.000046 select(8, [5 7], NULL, NULL, {9, 980758}) = 1 (in [5], left {9, 980755})
 0.000057 read(5, "; }'", 128)      = 4
 0.000046 select(8, [5 7], NULL, NULL, {9, 980755}) = 1 (in [5], left {9, 980752})
 0.000056 read(5, "pwd>", 128)      = 4
 0.000047 select(8, [5 7], NULL, NULL, {9, 980752}) = 1 (in [5], left {9, 980749})
 0.000057 read(5, "&8;k", 128)      = 4
 0.000047 select(8, [5 7], NULL, NULL, {9, 980749}) = 1 (in [5], left {9, 980746})
 0.000057 read(5, "ill", 128)       = 3
 0.000058 select(8, [5 7], NULL, NULL, {9, 980746}) = 1 (in [5], left {9, 980743})
 0.000057 read(5, " -ST", 128)      = 4
 0.000046 select(8, [5 7], NULL, NULL, {9, 980743}) = 1 (in [5], left {9, 980740})
 0.000058 read(5, "OP ", 128)       = 3
 0.000046 select(8, [5 7], NULL, NULL, {9, 980740}) = 1 (in [5], left {9, 980736})
 0.000056 read(5, "$$'\r\n", 128)   = 5
 0.000048 select(8, [5 7], NULL, NULL, {9, 980736}) = 1 (in [5], left {9, 980721})
 0.000069 read(5, "bash: PROMPT_COMMAND: line 1: syntax error near unexpected token `;;'\r\nbash: PROMPT_COMMAND: line 1: `;; pwd>&8;kill -STOP $$'\r\n", 128) = 128
 0.000049 select(8, [5 7], NULL, NULL, {9, 980721}) = 1 (in [5], left {9, 980713})
 0.000062 read(5, "[\33[1;30myuri\33[0m@\33[1;33myuri\33[0m ~] ", 128) = 36
 0.000047 select(8, [5 7], NULL, NULL, {9, 980713}) = 0 (Timeout)
 9.990855 rt_sigaction(SIGINT, {SIG_IGN, [], SA_RESTORER, 0x7f12567fc660}, NULL, 8) = 0

Ma conjoncture est que mc dérange d' PROMPT_COMMANDune mauvaise façon. Il change de PROMPT_COMMANDsorte que s'il contient ;, cela déclenche une erreur bash. En tant que tel, rien n'est écrit dans le descripteur 8, ce qui bloque le processus jusqu'à l'expiration du délai. Corrige moi si je me trompe.


1
Je sais que c'est une vieille réponse et tout. Mais j'ai peut-être de la chance et cela vous dérange d'expliquer pourquoi vous concluez de la sortie strace que quelque chose n'allait pas PROMPT_COMMAND. J'ai eu le même problème et je l'ai également résolu en le supprimant history -ade mon PROMPT_COMMANDmais je ne sais pas pourquoi cela aide et je ne sais pas où se trouve la connexion entre cela et select(8, [6,7], ...)(ce qui provoque apparemment le ralentissement de MC avec le délai). Vous pouvez peut-être m'aider à comprendre la solution.
degill

@degill Veuillez voir ma réponse mise à jour.
x-yuri

Merci pour la mise à jour! Vous avez raison, le simple fait d'introduire ;le PROMPT_COMMANDfait a le même effet de temporisation. Je sais ajouté history -aà mon PROMPT_COMMAND(à l'intérieur ~/.local/share/mc/bashrc) et tout fonctionne bien. Toujours intéressant mais ce qui se passe avec le;
degill

4
L'entrée de bogue en amont se trouve sur midnight-commander.org/ticket/3534 .
egmont

2

J'ai eu ce problème pendant très longtemps et j'ai fini par ne plus utiliser Midnight Commander ...

Mais j'ai récemment trouvé la solution !!! Dans mon cas, c'était uniquement lié à ma coquille alternative: j'utilise du poisson. http://fishshell.com/

Les deux ensemble ne fonctionnent pas très bien. Je viens de changer mon script pour m'assurer que mc utilise bash et pas fish.


Et pourquoi le poisson causerait-il de tels problèmes?
contre-mode

2

Je viens de résoudre le même problème sur FreeBSD. Je pense qu'il est plus correct d'éditer /etc/hostsde la manière suivante:

127.0.0.1 localhost localhost.my.domain myhost.my.domain myhost

car la hostssyntaxe d'entrée de fichier est (voir hosts (5) - page de manuel Linux ):

IP_address canonical_hostname [aliases...]

Donc, si vous ajoutez simplement hostsquelque chose dans votre fichier

127.0.0.2 myhost.my.domain myhost

alors vous obtiendrez

root@myhost:~# ping myhost
PING myhost.my.domain (127.0.0.2): 56 data bytes
ping: sendto: Can't assign requested address
ping: sendto: Can't assign requested address
ping: sendto: Can't assign requested address
ping: sendto: Can't assign requested address
^C
--- myhost.my.domain ping statistics ---
4 packets transmitted, 0 packets received, 100.0% packet loss

Mais si vous modifiez votre hostsfichier comme dans le premier exemple, vous obtiendrez la réponse ping correcte:

root@myhost:~# ping myhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.060 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.030 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.040 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.046 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.036 ms
^C
--- localhost ping statistics ---
6 packets transmitted, 6 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.030/0.044/0.060/0.010 ms

MC démarre rapidement dans les deux sens.


2
mc -X

travaillé pour moi (xterm désactivé)


C'était aussi le problème pour moi. DISPLAYLa variable d'environnement était définie sur localhost:10.0, mais aucun serveur X n'écoutait sur ce serveur sans affichage.
fviktor

0

Si vous utilisez MobaXterm pour vous connecter à SSH sur votre serveur, vous devrez peut-être désactiver le transfert X11 pour démarrer rapidement mc. C'est ce qui ralentit le démarrage du mc.


-1

Essayez de supprimer la ligne "rechercher quoi que ce soit. Quelque chose" de /etc/resolv.conf

/etc/hosts devrait avoir les lignes:

127.0.0.1 localhost

127.0.0.2 hostname.domain hostname

"hostname" est votre hostname et "domain" est votre domaine.


Cela n'a de sens que si la machine n'est jamais connectée au réseau. Ce fichier est rempli par DHCP (ou lorsque la connexion Internet est configurée).
vonbrand
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.