Медленный старт 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.