Langsamer Start von Midnight Commander


19

Gibt es eine Möglichkeit zu verhindern, dass mcdas Öffnen 10 bis 30 Sekunden dauert?


1
Hast du es mit kompiliert --enable-vfs-smb? Deaktivieren Sie die Funktion. Scheint ein häufiges Problem mit Version 4.8.4 zu sein: mc startet sehr LANGSAM
Marco

2
Lauf, um strace -r -tt -o mc.strace mczu sehen, wo es Zeit braucht. Laden Sie die Trace-Datei hoch, wenn Sie Hilfe bei der Interpretation benötigen. Beachten Sie, dass die Tracedatei möglicherweise private Informationen (mindestens Dateinamen) enthält. Sehen Sie sich diese an und bereinigen Sie sie gegebenenfalls, bevor Sie sie hochladen.
Gilles 'SO- hör auf, böse zu sein'

1
hatte das gleiche Problem, Hostname zu / etc / hosts hinzugefügt (wie natürlich 127.0.0.1), alles wurde perfekt

Antworten:


5

Es funktioniert jetzt für mich. ich benutze

GNU Midnight Commander 4.8.21

Warte lange

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

Ich habe es versucht:

# hostname

Verwenden Sie dies für /etc/hosts:

nameofhost=hostname

Fügen Sie dies $nameofhostzu der /etc/hostsZeile hinzu , die mit beginnt

127.0.0.1 localhost ... $nameofhost 

Prost!


12

mc / subshell integration ist ein häufiger schuldiger ; Versuchen Sie zur Bestätigung Folgendes:

alias mc="mc --nosubshell"

1
Dies war die einzige Lösung, die für mich funktioniert hat. Ich kann sehen, dass ich Zugriff auf cmd-o habe, aber ich kann keine Befehle eingeben.
Panayotis

funktioniert nicht für mich
stiv

10

Die Bearbeitung von / etc / hosts löste das Problem für mich.
Mein mc brauchte 10 Sekunden, um zu starten, da mc beim Start versucht, den lokalen Hostnamen in eine IP-Adresse aufzulösen.
Ich fügte / etc / hosts die folgende Zeile hinzu (mein Hostname ist FOO), 127.0.0.2 FOO.domain FOO die das Problem sofort löste.


Warum hast du 127.0.0.2aber nicht benutzt 127.0.0.1?
Dims

Jedes x, y, z in 127.xyz funktioniert genauso gut (der gesamte IP-Bereich ist für den lokalen Computer reserviert)
ggpp23

5

Prüfen

host `hostname`

schnelles ergebnis bekommen

MC verwendet zunächst den Hostnamen, um eine Verbindung zum internen Dienst herzustellen

In einer ähnlichen Situation auf Fedora 18 füge ich den Wert hostname zu / etc / hosts hinzu und es hilft.


mc interner service? Möglicherweise könnten wir einige Konfigurationen ändern, um mc so zu reparieren, dass keine Änderung von / etc / hosts erforderlich ist. oder ist die / etc / hosts kaputt und mc erwartet eine korrektur?
Aquarius Power

oh, ich habe gerade festgestellt, dass dies hier funktioniert:alias mc='TERM=linux mc'
Aquarius Power

Wirklich / etc / hosts ist aus irgendeiner Sicht kaputt. Es ist unmöglich, den eigenen Hostnamen in eine eigene IP aufzulösen. Ich weiß nicht, warum ich dort davon abhängig bin.
MMV-Ru

1
Was meinst du damit host 'hostname'? Es gibt das gleiche wie host 'aaaa', host 'aaab'und die endlose Liste der nicht vorhandenen Hosts. Meinte yoy, dass MC versucht, nicht vorhandene Hosts aufzulösen?
Dims

Entschuldigung, Apostroph muss anstelle von einfachen Anführungszeichen vorhanden sein. Antwort behoben. In gewisser Weise ja. MC stellen über Ihren Hostnamen eine Verbindung zum eigenen Server her, sodass der Host nicht mehr vorhanden ist und viele Versuche unternommen werden.
mmv-ru

4

Es wird möglicherweise langsam gestartet, da eine Subshell gestartet wird (angezeigt, wenn Sie Strg-O drücken) und die Benutzeroberfläche nur beim Start der Subshell angezeigt wird. Ich benutze zsh und mir ist aufgefallen, dass ~/.zshrcmc beim Entfernen meiner Datei sofort startet.


2
Siehe midnight-commander.org/ticket/3580 auf eine mögliche Verbesserung durch den Sub - Shell im Hintergrund starten.
Aleb

Sie müssen es also neu kompilieren?
Panayotis

3

Der Start dauerte ungefähr 10 Sekunden mc. Laufen habe strace -r -tt -o mc.strace mcich:

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

Als ich mir diese Ausgabe ansah, entschied ich mich, mcmit empty PROMPT_COMMAND( PROMPT_COMMAND= mc) zu beginnen, und sie begann sofort. Ich hatte dort angeblich gemeinsam:

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

UPD Nach einigem mehr Graben stellt sich heraus, dass es nichts mit der Geschichte zu tun hat ( 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

Mein conjuncture ist , dass mcVerwirrungen mit PROMPT_COMMANDin einer falschen Weise. Es ändert sich, PROMPT_COMMANDso dass, wenn es enthält ;, dies einen Bash-Fehler auslöst. Daher wird nichts in den Deskriptor geschrieben 8, wodurch der Prozess bis zum Timeout blockiert wird. Korrigiere mich, wenn ich falsch liege.


1
Ich weiß, das ist eine alte Antwort und alles. Aber vielleicht habe ich Glück und es macht Ihnen etwas aus zu erklären, warum Sie aus der Ausgabe von strace schließen, dass etwas nicht in Ordnung war PROMPT_COMMAND. Ich hatte das gleiche Problem und habe es auch gelöst, indem ich es von history -ameinem entfernt habe, PROMPT_COMMANDaber ich habe keine Ahnung, warum das hilft, und ich habe keine Ahnung, wo die Verbindung zwischen dem und select(8, [6,7], ...)(was anscheinend die Verlangsamung von MC mit dem Timeout verursacht) ist. Vielleicht können Sie mir helfen, die Lösung zu verstehen.
abkühlen

@degill Bitte sehen Sie meine aktualisierte Antwort.
X-Yuri

Danke für das Update! Sie haben recht, nur darum , ;in der PROMPT_COMMANDdie gleiche Wirkung von Zeitüberschreitung hat. Ich weiß, history -awieder zu meinem PROMPT_COMMAND(inneren ~/.local/share/mc/bashrc) hinzugefügt und alles funktioniert gut. Immer noch interessant, was mit dem;
degill

4
Der Eintrag zum Upstream-Bug ist unter midnight-commander.org/ticket/3534 .
Egmont

2

Ich hatte dieses Problem sehr lange und habe Midnight Commander letztendlich nicht mehr verwendet ...

Aber ich habe vor kurzem die Lösung gefunden !!! In meinem Fall hatte es nur mit meiner alternativen Schale zu tun: Ich benutze Fisch. http://fishshell.com/

Die beiden zusammen funktionieren nicht großartig. Ich habe gerade mein Skript geändert, um sicherzustellen, dass mc bash und nicht fish verwendet.


Und warum sollte Fisch solche Probleme verursachen?
Gegenmodus

2

Habe gerade das gleiche Problem unter FreeBSD gelöst. Ich denke, es ist richtiger, /etc/hostsauf folgende Weise zu bearbeiten :

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

da die hostsSyntax für die Dateieingabe lautet (siehe hosts (5) - Linux-Handbuchseite ):

IP_address canonical_hostname [aliases...]

Also, wenn Sie einfach in Ihrer hostsDatei so etwas wie hinzufügen

127.0.0.2 myhost.my.domain myhost

dann wirst du bekommen

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

Wenn Sie Ihre hostsDatei jedoch wie im ersten Beispiel bearbeiten , erhalten Sie die richtige Ping-Antwort:

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 startet schnell in beide Richtungen.


2
mc -X

hat für mich gearbeitet (xterm disabled)


Das war auch für mich das Problem. DISPLAYUmgebungsvariable wurde auf gesetzt localhost:10.0, aber es gab dort keinen X-Server, der auf diesem Server ohne Anzeige empfing.
fviktor

-1

Versuchen Sie, die Zeile "search whatever.something" von zu löschen /etc/resolv.conf

/etc/hosts sollte die Zeilen haben:

127.0.0.1 localhost

127.0.0.2 hostname.domain hostname

"Hostname" ist Ihr Hostname und "Domain" ist Ihre Domain.


Das ist nur dann sinnvoll , wenn die Maschine nie mit dem Netz verbunden ist. Diese Datei wird von DHCP ausgefüllt (oder wenn die Internetverbindung konfiguriert ist).
Vonbrand
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.