Unter Ubuntu öffne ich ein Terminal und mache
sudo bash
cd /
ls | head -n 1000
Und voraussichtlich werden ungefähr 20 Verzeichnisse zurückgegeben.
Wenn ich jedoch ein ls mache und es nicht in irgendetwas hineinpfeife, hängt das ls nur dort, bis ich es von einem anderen Terminal aus töte. Was könnte passieren?
BEARBEITEN:
> type ls
ls is aliased to `ls --color=auto`
BEARBEITEN:
> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>
Warum hängt der Befehl beim Färben der Ausgabe von ls?
shell
command-line
files
ls
Snitse
quelle
quelle
type ls
, um mögliche Aliase usw. zu überprüfenstrace ls
kann Ihnen möglicherweise dabei helfen, das Problem zu identifizieren.strace
Zeigt alle Systemaufrufe des aufgerufenen Programms an./bin/ls
(oder besser gesagtcommand ls
),ls
ohne die Alias-Optionen auszuführen, um zu bestätigen, ob die Farboption den Unterschied ausmacht oder nicht. FWIW: Deaktiviertls
die Färbung, wenn es sich bei der Ausgabe um eine Pipe oder ein anderes Nicht-Terminal-Gerät handelt.\ls
Antworten:
Wenn Sie ls normal ausführen, wird nur die Liste der Dateien angezeigt, ohne dass stat (2) für eine dieser Dateien ausgeführt werden muss. Mit anderen Worten, es greift nicht auf die DATEIEN selbst zu, sondern nur auf das Verzeichnis, in dem sich die Dateien befinden.
Wenn Sie die Option --color hinzufügen oder andere ls-Optionen verwenden, um die Dateien selbst zu untersuchen, muss ls diese Dateien stat (2).
Höchstwahrscheinlich wird mindestens eine der Dateien in Ihrem Verzeichnis tatsächlich von einem Remote-System über NFS oder ähnliches bereitgestellt. Und der Server, von dem aus Sie diese Partition gemountet haben, ist nicht in Betrieb oder antwortet nicht. Wenn ls versucht, die Informationen zu diesem Verzeichnis abzurufen, hängt es im Kernel und wartet darauf, dass der Server antwortet.
Wie bereits erwähnt, können Sie mit strace feststellen, auf welches Verzeichnis zugegriffen wird, wenn es hängt. Dann können Sie diese gemountete Partition oder was auch immer umounten.
quelle
sshfs
Reittiere, und die einzige Möglichkeit, sie abzunehmen, bestand darin, die damit verbundenen Vorgängessh
undsshfs
Prozesse zu beenden .