Медленный старт Midnight Commander


19

Можно ли как-то помешать mcоткрыть 10-30 секунд?


1
Вы скомпилировали это --enable-vfs-smb? Попробуйте отключить эту функцию. Кажется, это общая проблема с версией 4.8.4: запуск mc очень медленный
Marco

2
Беги, strace -r -tt -o mc.strace mcчтобы увидеть, где нужно время. Загрузите файл трассировки, если вам нужна помощь в его интерпретации. Обратите внимание, что файл трассировки может содержать личную информацию (по крайней мере, имена файлов), взгляните на нее и при необходимости очистите ее перед загрузкой.
Жиль "ТАК - перестань быть злым"

1
была та же проблема, добавили имя хоста в / etc / hosts (как, конечно, 127.0.0.1), все стало идеально

Ответы:


5

Это работает для меня сейчас. Я использую

GNU Midnight Commander 4.8.21

перестань ждать долго

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

Я попробовал это:

# hostname

используйте это для /etc/hosts:

nameofhost=hostname

добавить это $nameofhostв /etc/hostsонлайн, начиная с

127.0.0.1 localhost ... $nameofhost 

Ура!


12

Интеграция mc / subshell является частым виновником; чтобы проверить, попробуйте:

alias mc="mc --nosubshell"

1
Это было единственное решение, которое сработало для меня. Я вижу, что у меня есть доступ к cmd-o, но я не могу вводить какие-либо команды.
Панайотис

не работает для меня
Stiv

10

На самом деле редактирование / etc / hosts решило проблему для меня.
Мой mc потребовалось 10 секунд для запуска из-за того, что во время запуска mc пытается разрешить локальное имя хоста в IP-адрес.
Я добавил в / etc / hosts следующую строку (мое имя хоста FOO), 127.0.0.2 FOO.domain FOO что сразу решило проблему.


Почему вы использовали, 127.0.0.2но нет 127.0.0.1?
Димс

любые x, y, z в 127.xyz будут работать одинаково хорошо (весь диапазон IP-адресов зарезервирован для локальной машины)
ggpp23

5

Проверьте

host `hostname`

получить быстрый результат

MC сначала использует имя хоста для подключения к внутренней службе

В аналогичной ситуации на Fedora 18 я добавляю значение имени хоста в / etc / hosts, и это помогает.


тс внутренний сервис? может быть, мы могли бы изменить некоторые настройки, чтобы исправить mc, чтобы не требовать изменения / etc / hosts? или / etc / hosts не работает и mc ожидает, что это будет исправлено?
Водолей Пауэр

о, я только что обнаружил, что это работает здесь:alias mc='TERM=linux mc'
Водолей Power

Действительно / etc / hosts не работает, с некоторой точки зрения. Невозможно разрешить собственное имя хоста для собственного ip. Я не знаю, почему mc зависит от этого там.
mmv-ru

1
Что вы имеете в виду host 'hostname'? Он возвращает то же самое host 'aaaa', host 'aaab'и бесконечный список несуществующих хостов. Означает ли это, что MC пытается разрешить несуществующий хост?
Dims

Извините, вместо одинарных кавычек должен быть апостроф. Ответ исправлен. В некотором смысле, да. MC устанавливает соединение с собственным сервером по имени вашего хоста, поэтому он получает несуществующий хост и делает много попыток.
mmv-ru

4

Это может начаться медленно, потому что он запускает подоболочку (отображается при нажатии Ctrl-O) и отображает пользовательский интерфейс только при запуске подоболочки. Я использую zsh и заметил, что когда я удаляю мой ~/.zshrcфайл, mc запускается мгновенно.


2
Смотрите midnight-commander.org/ticket/3580 для возможного улучшения, запустив подоболочку в фоновом режиме.
17

Итак, нужно ли перекомпилировать его?
Панайотис

3

Началось около 10 секунд mc. Бег strace -r -tt -o mc.strace mcя получил:

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

Глядя на этот вывод, я решил начать mcс empty PROMPT_COMMAND( PROMPT_COMMAND= mc), и он начался мгновенно. У меня там якобы общие

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

UPD После еще нескольких копаний оказывается, что это не имеет ничего общего с history ( 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

Моя конъюнктуре является то , что mcбеспорядки с PROMPT_COMMANDнеправильным образом. Он изменяется PROMPT_COMMANDтак, что, если он содержит ;, это вызывает ошибку bash. Таким образом, ничего не записывается в дескриптор 8, который блокирует процесс до истечения времени ожидания. Поправьте меня если я ошибаюсь.


1
Я знаю, что это старый ответ и все. Но, может быть, мне повезло, и вы не могли бы объяснить, почему вы пришли к выводу, что что-то не так PROMPT_COMMAND. У меня была та же проблема, и я также решил ее, удалив history -aиз своей, PROMPT_COMMANDно я понятия не имею, почему это помогает, и я понятия не имею, где связь между этим и select(8, [6,7], ...)(что, очевидно, вызывает замедление MC с таймаутом). Может быть, вы можете помочь мне понять решение.
Дегилл

@degill Пожалуйста, смотрите мой обновленный ответ.
x-yuri

Спасибо за обновление! Вы правы, просто положить ;в PROMPT_COMMANDдействительно имеют тот же эффект тайм - аут. Я знаю, добавил history -aобратно в мою PROMPT_COMMAND(внутри ~/.local/share/mc/bashrc), и все работает нормально. Тем не менее, интересно, что ;
случилось

4
Верхняя запись об ошибке находится по адресу midnight-commander.org/ticket/3534 .
egmont

2

У меня была эта проблема в течение очень долгого времени, и я больше не использовал Midnight Commander ...

Но я недавно нашел решение !!! В моем случае это было связано только с моей альтернативной оболочкой: я использую рыбу. http://fishshell.com/

Два вместе не работают отлично. Я просто изменил свой сценарий, чтобы mc использовал bash, а не fish.


И почему рыба вызывает такие проблемы?
контрмод

2

Просто решил ту же проблему на FreeBSD. Я думаю, что правильнее редактировать /etc/hostsследующим образом:

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

потому что hostsсинтаксис записи файла (см. hosts (5) - страница руководства Linux ):

IP_address canonical_hostname [aliases...]

Итак, если вы просто добавите в свой hostsфайл что-то вроде

127.0.0.2 myhost.my.domain myhost

тогда вы получите

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

Но если вы отредактируете свой hostsфайл, как в первом примере, вы получите правильный ответ 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

MC начинается быстро в обоих направлениях.


2
mc -X

работал для меня (Xterm отключен)


Это было проблемой и для меня. DISPLAYпеременная окружения была установлена ​​на localhost:10.0, но там не было прослушивания X-сервера на этом сервере без отображения.
fviktor

0

Если вы используете MobaXterm для подключения к SSH на вашем сервере, вам может потребоваться отключить пересылку X11, чтобы вскоре запустить mc. Это то, что замедляет запуск mc.


-1

Попробуйте удалить строку "search what.something" из /etc/resolv.conf

/etc/hosts должны иметь строки:

127.0.0.1 localhost

127.0.0.2 hostname.domain hostname

«hostname» - это ваше имя хоста, а «domain» - это ваш домен.


Это имеет смысл, только если машина никогда не подключена к сети. Этот файл заполняется DHCP (или когда настроено интернет-соединение).
vonbrand
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.