Início lento do Midnight Commander

19

Existe alguma maneira de impedir mcque 10-30 segundos sejam abertos?

stiv
fonte
1
Você o compilou --enable-vfs-smb? Tente desativar o recurso. Parece ser um problema comum com a versão 4.8.4: mc arranque muito lento
Marco
2
Corra strace -r -tt -o mc.strace mcpara ver onde está demorando. Faça o upload do arquivo de rastreamento, se precisar de ajuda para interpretá-lo. Observe que o arquivo de rastreio pode conter informações particulares (pelo menos nomes de arquivos), dê uma olhada nele e desinfecte-o, se necessário, antes do upload.
Gilles 'SO- stop be evil'
1
tive o mesmo problema, hostname adicionado / etc / hosts (como 127.0.0.1, é claro), tudo se tornou perfeito

Respostas:

5

Trabalha para mim agora. estou usando

GNU Midnight Commander 4.8.21

strace espera em muito tempo

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)' 

Eu tentei isso:

# hostname

use isso para /etc/hosts:

nameofhost=hostname

adicione isso $nameofhostao /etc/hostson-line começando com

127.0.0.1 localhost ... $nameofhost 

Felicidades!

Xandersoft
fonte
12

a integração mc / subshell é um culpado frequente; para verificar, tente:

alias mc="mc --nosubshell"
Andrei Pozolotin
fonte
1
Esta foi a única solução que funcionou para mim. Percebo que tenho acesso ao cmd-o, mas não consigo digitar nenhum comando.
Panayotis 27/01
não funciona para mim
stiv
10

A edição do / etc / hosts resolveu o problema para mim.
Meu mc levou 10 segundos para iniciar, devido ao fato de que durante a inicialização o mc tenta resolver o nome do host local para um endereço IP.
Eu adicionei ao / etc / hosts a seguinte linha (meu nome do host é FOO) 127.0.0.2 FOO.domain FOO que resolveu o problema instantaneamente.

ggpp23
fonte
Por que você usou 127.0.0.2mas não 127.0.0.1?
Dims
qualquer x, y, z em 127.xyz funcionará igualmente bem (toda a gama de IP é reservado para a máquina local)
ggpp23
5

Verifica

host `hostname`

obter resultado rápido

O MC usa o nome do host primeiro para se conectar ao serviço interno

Em situação semelhante no Fedora 18, adiciono o valor do nome do host ao / etc / hosts e isso ajuda.

mmv-ru
fonte
mc serviço interno? pode ser que possamos mudar alguma configuração para corrigir o mc para não exigir a alteração do / etc / hosts? ou o / etc / hosts está quebrado e o mc espera que seja corrigido?
Poder de Aquário
ah, acabei de descobrir que isso funciona aqui:alias mc='TERM=linux mc'
Aquarius Power
Realmente / etc / hosts está quebrado, de algum ponto de vista. Impossível resolver o próprio nome do host para possuir o ip. Não sei por que mc depende disso lá.
MMV-ru
1
Como assim host 'hostname'? Ele retorna a mesma host 'aaaa', host 'aaab'ea lista interminável de anfitriões não-existente. Você queria dizer que o MC está tentando resolver um host inexistente?
Dims 23/02
Desculpe, o apóstrofo deve estar lá no lugar de aspas simples. Resposta corrigida. De alguma forma, sim. O MC faz a conexão com o próprio servidor por Seu nome de host, para obter um host inexistente e fazer várias tentativas.
MMV-ru
4

Pode começar devagar porque inicia um subshell (mostrado quando você pressiona Ctrl-O) e exibe a interface do usuário somente quando o subshell foi iniciado. Eu uso o zsh e notei que quando removo meu ~/.zshrcarquivo, o mc inicia instantaneamente.

aleb
fonte
2
Consulte midnight-commander.org/ticket/3580 para obter uma possível melhoria iniciando o subshell em segundo plano.
aleb
Então, é necessário recompilar?
Panayotis
3

Demorou cerca de 10 segundos para começar mc. Correndo strace -r -tt -o mc.strace mceu tenho:

...
 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
...

Olhando para essa saída, decidi começar mccom empty PROMPT_COMMAND( PROMPT_COMMAND= mc) e ela começou instantaneamente. Eu tinha lá supostamente comum:

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

UPD Após mais escavações, verifica-se que não tem nada a ver com a história ( 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

Minha conjuntura é que mcmexe de PROMPT_COMMANDmaneira errada. Ele muda PROMPT_COMMANDpara que, se contiver ;, desencadeie um erro de bash. Como tal, nada é gravado no descritor 8, que bloqueia o processo até o tempo limite. Corrija-me se eu estiver errado.

x-yuri
fonte
1
Eu sei que esta é uma resposta antiga e tudo. Mas talvez eu tenha sorte e você se importe em explicar por que conclui da saída do strace que algo estava errado PROMPT_COMMAND. Eu tive o mesmo problema e também o resolvi removendo history -ado meu, PROMPT_COMMANDmas não tenho idéia do porquê disso ajuda e não tenho ideia de onde está a conexão entre isso e select(8, [6,7], ...)(o que aparentemente causa a lentidão do MC com o tempo limite). Talvez você possa me ajudar a entender a solução.
degill 29/08/2015
@degill Por favor, veja minha resposta atualizada.
X-yuri
Obrigado pela atualização! Você está certo, apenas colocando ;no PROMPT_COMMANDtem o mesmo efeito do tempo limite. Eu sei adicionado history -anovamente ao meu PROMPT_COMMAND(dentro ~/.local/share/mc/bashrc) e tudo funciona bem. Ainda interessante o que está acontecendo com o;
degill 30/08/2015
4
A entrada do bug upstream está em midnight-commander.org/ticket/3534 .
egmont
2

Eu tive esse problema por muito tempo e acabei não usando mais o Midnight Commander ...

Mas recentemente encontrei a solução !!! No meu caso, isso estava relacionado apenas à minha concha alternativa: estou usando peixe. http://fishshell.com/

Os dois juntos não funcionam muito bem. Acabei de alterar meu script para garantir que o mc use o bash e não o fish.

Cecile
fonte
E por que os peixes causariam tais problemas?
Contramodo
2

Apenas resolvi o mesmo problema no FreeBSD. Eu acho que é mais correto editar /etc/hostsda seguinte maneira:

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

porque a hostssintaxe de entrada de arquivo é (consulte hosts (5) - página de manual do Linux ):

IP_address canonical_hostname [aliases...]

Então, se você apenas adicionar no seu hostsarquivo algo como

127.0.0.2 myhost.my.domain myhost

então você receberá

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

Mas se você editar seu hostsarquivo como no primeiro exemplo, obterá a resposta correta do ping:

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

O MC começa rápido nos dois sentidos.

quicktrick
fonte
2
mc -X

trabalhou para mim (xterm desativado)

Daniel Nie
fonte
Este foi o problema para mim também. DISPLAYA variável de ambiente foi definida como localhost:10.0, mas não havia um servidor X atendendo naquele servidor sem exibição.
fviktor 7/12
-1

Tente excluir a linha "pesquisar qualquer coisa." /etc/resolv.conf

/etc/hosts deve ter as linhas:

127.0.0.1 localhost

127.0.0.2 hostname.domain hostname

"hostname" é o seu nome de host e "domain" é o seu domínio.

dragulj
fonte
Isso faz algum sentido apenas se a máquina nunca estiver conectada à rede. Esse arquivo é preenchido pelo DHCP (ou quando a conexão com a Internet está configurada).
vonbrand