Powolny start Midnight Commander


19

Czy jest jakiś sposób, aby zapobiec mcotwarciu 10-30 sekund?


1
Czy to skompilowałeś --enable-vfs-smb? Spróbuj wyłączyć tę funkcję. Wydaje się, że jest to powszechny problem z wersją 4.8.4: mc zaczyna się bardzo WOLNO
Marco

2
Biegnij, strace -r -tt -o mc.strace mcaby zobaczyć, gdzie zajmuje to czas. Prześlij plik śledzenia, jeśli potrzebujesz pomocy w jego interpretacji. Pamiętaj, że plik śledzenia może zawierać prywatne informacje (przynajmniej nazwy plików), spójrz na nie i wyczyść je w razie potrzeby przed przesłaniem.
Gilles „SO- przestań być zły”

1
miał ten sam problem, dodałem nazwę hosta do / etc / hosts (oczywiście jako 127.0.0.1), wszystko stało się idealne

Odpowiedzi:


5

Teraz działa dla mnie. ja używam

GNU Midnight Commander 4.8.21

długo czekać

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

Próbowałem tego:

# hostname

użyj tego do /etc/hosts:

nameofhost=hostname

dodaj to $nameofhostdo /etc/hostslinii zaczynając od

127.0.0.1 localhost ... $nameofhost 

Twoje zdrowie!


12

Integracja MC / SUBHELL jest częstym winowajcą; aby zweryfikować, spróbuj:

alias mc="mc --nosubshell"

1
To było jedyne rozwiązanie, które działało dla mnie. Widzę, że mam dostęp do cmd-o, ale nie mogę pisać żadnych poleceń.
Panayotis

nie działa dla mnie
stiv

10

Właściwie edytowanie / etc / hosts rozwiązało problem dla mnie.
Mój mc potrzebował 10 sekund na uruchomienie, ponieważ podczas uruchamiania mc próbuje rozpoznać lokalną nazwę hosta na adres IP.
Dodałem do / etc / hosts następujący wiersz (moja nazwa hosta to FOO) 127.0.0.2 FOO.domain FOO To natychmiast rozwiązało problem.


Dlaczego używałeś, 127.0.0.2ale nie 127.0.0.1używałeś?
Dims,

dowolne x, y, z w 127.xyz będzie działać równie dobrze (cały zakres IP jest zarezerwowany dla komputera lokalnego)
ggpp23 30.01.2018

5

Czek

host `hostname`

uzyskać szybki wynik

MC najpierw używa nazwy hosta, aby połączyć się z usługą wewnętrzną

W podobnej sytuacji na Fedorze 18 dodaję wartość nazwy hosta do / etc / hosts i to pomaga.


MC usługa wewnętrzna? być może moglibyśmy zmienić konfigurację, aby naprawić MC, aby nie wymagała zmiany / etc / hosts? lub czy plik / etc / hosts jest uszkodzony i mc oczekuje, że zostanie poprawiony?
Wodnik Moc

och, właśnie odkryłem, że to działa tutaj:alias mc='TERM=linux mc'
Aquarius Power

Naprawdę / etc / hosts jest zepsuty, z pewnego punktu widzenia. Niemożliwe jest rozstrzygnięcie własnej nazwy hosta na własność ip. Nie wiem, dlaczego mc na tym polega.
mmv-ru

1
Co masz na myśli host 'hostname'? Zwraca ona taka sama, jak host 'aaaa', host 'aaab'i niekończące się listy Nieistniejących gospodarzy. Czy rok miałeś na myśli, że MC próbuje rozwiązać nieistniejącego hosta?
Przyciemnia

Przepraszamy, apostrof musi znajdować się w miejscu pojedynczych cytatów. Odpowiedź naprawiona. W pewien sposób tak. MC nawiązuje połączenie z własnym serwerem przez Twoją nazwę hosta, dzięki czemu uzyskuje nieistniejący host i podejmuje wiele prób.
mmv-ru

4

Może zacząć działać wolno, ponieważ uruchamia podpowłokę (wyświetlaną po naciśnięciu Ctrl-O) i wyświetla interfejs użytkownika tylko po uruchomieniu podpowłoki. Korzystam z zsh i zauważyłem, że po usunięciu ~/.zshrcpliku mc uruchamia się natychmiast.


2
Zobacz midnight-commander.org/ticket/3580, aby uzyskać informacje na temat możliwych ulepszeń poprzez uruchomienie podpowłoki w tle.
aleb

Czy istnieje potrzeba ponownej kompilacji?
Panayotis

3

Uruchomienie trwało około 10 sekund mc. Z biegiem strace -r -tt -o mc.strace mcmam:

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

Patrząc na ten wynik, postanowiłem zacząć mcod empty PROMPT_COMMAND( PROMPT_COMMAND= mc) i zaczęło się ono natychmiast. Miałem tam podobno wspólne:

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

UPD Po dalszych kopaniach okazuje się, że nie ma to nic wspólnego z historią ( 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

Moja koniunktura jest taka, że źle się mcz tym miesza PROMPT_COMMAND. Zmienia się PROMPT_COMMANDtak, że jeśli zawiera ;, powoduje błąd bash. W związku z tym nic nie jest zapisywane w deskryptorze 8, co blokuje proces do upływu limitu czasu. Popraw mnie, jeśli się mylę.


1
Wiem, że to stara odpowiedź. Ale może mam szczęście i nie masz nic przeciwko wytłumaczeniu, dlaczego wyciągasz wnioski z wyników strace, że coś jest nie tak PROMPT_COMMAND. Miałem ten sam problem i również go rozwiązałem, usuwając history -az mojego, PROMPT_COMMANDale nie mam pojęcia, dlaczego to pomaga i nie mam pojęcia, gdzie jest związek między tym a select(8, [6,7], ...)(co najwyraźniej powoduje spowolnienie MC z upływem czasu). Może pomożesz mi zrozumieć rozwiązanie.
degill

@degill Proszę zobaczyć moją zaktualizowaną odpowiedź.
x-yuri

Dziękuję za aktualizację! Masz rację, tylko wprowadzenie ;w PROMPT_COMMANDma ten sam efekt limitu czasu. Wiem, że dodałem history -ado mojegoPROMPT_COMMAND (wewnątrz ~/.local/share/mc/bashrc) i wszystko działa dobrze. Nadal ciekawe, co się dzieje z;
degill

4
Wpis błędu powyżej znajduje się na midnight-commander.org/ticket/3534 .
egmont

2

Miałem ten problem przez bardzo długi czas i ostatecznie przestałem używać Midnight Commander ...

Ale ostatnio znalazłem rozwiązanie !!! W moim przypadku było to związane tylko z moją alternatywną powłoką: używam ryb. http://fishshell.com/

Te dwie rzeczy razem nie działają świetnie. Właśnie zmieniłem skrypt, aby upewnić się, że mc używa bash, a nie ryb.


A dlaczego ryby miałyby powodować takie problemy?
kontr

2

Właśnie rozwiązałem ten sam problem na FreeBSD. Myślę, że bardziej poprawne jest edytowanie /etc/hostsw następujący sposób:

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

ponieważ hostsskładnia wpisu pliku to (patrz hosts (5) - strona podręcznika systemu Linux ):

IP_address canonical_hostname [aliases...]

Więc jeśli tylko dodasz swój hosts pliku coś takiego

127.0.0.2 myhost.my.domain myhost

wtedy dostaniesz

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

Ale jeśli edytujesz swój hosts plik, tak jak w pierwszym przykładzie, otrzymasz poprawną odpowiedź 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 zaczyna się szybko w obie strony.


2
mc -X

pracował dla mnie (Xterm wyłączone)


To był również problem dla mnie. DISPLAYzmienna środowiskowa została ustawiona na localhost:10.0, ale serwer X nie nasłuchiwał na tym serwerze bez wyświetlacza.
fviktor,

0

Jeśli używasz MobaXterm do łączenia się z SSH na swoim serwerze, może być konieczne wyłączenie przekierowania X11, aby wkrótce uruchomić mc. To spowalnia start MC.


-1

Spróbuj usunąć wiersz „szukaj cokolwiek. Coś” /etc/resolv.conf

/etc/hosts powinien mieć linie:

127.0.0.1 localhost

127.0.0.2 hostname.domain hostname

„nazwa hosta” to nazwa hosta, a „domena” to domena.


Ma to sens tylko wtedy, gdy maszyna nigdy nie jest podłączona do sieci. Ten plik jest wypełniany przez DHCP (lub gdy skonfigurowane jest połączenie internetowe).
vonbrand
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.