Разница между man
и другими командами, такими как ls
, заключается в последние (те, кто не жалуется на несуществующий каталог) не пытаются явно изменить там, а уже остаются там. Человек тоже это делает, но он также пытается явно измениться.
Каталоги UNIX (как файлы) не удаляются сразу после вызова unlink (2)
или rmdir (2)
для них, а только запись их каталога в родительском каталоге устранен. Каталог / файл остается до тех пор, пока на них ссылаются процессы. Как только последняя ссылка исчезает, ядро эффективно удаляет блоки, принадлежащие файлам / каталогам.
По этой причине не возникает ошибки при вызове ls
в каталоге, который больше не существует, поскольку ваша оболочка все еще существует (она ссылается на каталог как на свой текущий каталог) и ls
], начатое оттуда, просто наследует это свойство. Но так как man
явно пытается chdir (2)
там, то есть к записи каталога , которая больше не существует, он выскакивает.