Menjalankan Ubuntu, saya membuka terminal dan lakukan
sudo bash
cd /
ls | head -n 1000
Dan diprediksi sekitar 20 direktori dikembalikan.
Namun, jika saya melakukan ls, dan tidak menyalurkannya ke apa pun, ls hanya menggantung di sana sampai saya membunuhnya dari terminal lain. Apa yang mungkin terjadi?
EDIT:
> type ls
ls is aliased to `ls --color=auto`
EDIT:
> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>
Mengapa mewarnai keluaran ls menyebabkan perintah ini hang?
shell
command-line
files
ls
Snitse
sumber
sumber
type ls
untuk memeriksa kemungkinan alias dll.strace ls
berpotensi membantu Anda mengidentifikasi masalah.strace
menampilkan semua panggilan sistem yang dibuat oleh program yang dipanggilnya./bin/ls
(atau lebih tepatnya,command ls
) untuk berjalanls
tanpa opsi alias, untuk mengkonfirmasi apakah atau tidak itu opsi warna yang membuat perbedaan. FWIW,ls
mematikan pewarnaan saat outputnya berupa pipa atau perangkat non-terminal lainnya.\ls
Jawaban:
Jika Anda menjalankan ls secara normal, itu hanya akan menampilkan daftar file tanpa perlu menjalankan stat (2) di antara mereka. Dengan kata lain, itu tidak mengakses FILES sendiri, tetapi hanya direktori yang berisi file.
Jika Anda menambahkan opsi --color, atau menggunakan opsi ls lain yang perlu memeriksa file-file itu sendiri, maka ls perlu memberi stat (2) file-file itu.
Kemungkinan besar setidaknya satu file dalam direktori Anda sebenarnya sedang dipasang dari sistem jarak jauh, melalui NFS atau serupa. Dan server tempat Anda menginstal partisi tersebut tidak aktif atau tidak merespons. Jadi, ketika ls mencoba untuk mendapatkan informasi tentang direktori itu, ia akan menggantung di kernel menunggu server untuk merespons.
Seperti yang telah disebutkan orang lain, jika Anda menggunakan strace Anda akan menemukan direktori mana yang coba diakses ketika hang. Kemudian Anda dapat umount partisi yang dipasang itu atau apa pun.
sumber
sshfs
tunggangan, dan satu-satunya cara saya bisa melepasnya adalah dengan membunuh yang terkaitssh
dansshfs
proses.