Странная ошибка (?), когда я выполняю команду 'человека' от папки, которая больше не существует

Если у Вас есть Порты Mac:

$ sudo /opt/local/bin/port install orpie
3
19.04.2014, 15:51
1 ответ

Разница между man и другими командами, такими как ls , заключается в последние (те, кто не жалуется на несуществующий каталог) не пытаются явно изменить там, а уже остаются там. Человек тоже это делает, но он также пытается явно измениться.

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

По этой причине не возникает ошибки при вызове ls в каталоге, который больше не существует, поскольку ваша оболочка все еще существует (она ссылается на каталог как на свой текущий каталог) и ls ], начатое оттуда, просто наследует это свойство. Но так как man явно пытается chdir (2) там, то есть к записи каталога , которая больше не существует, он выскакивает.

3
27.01.2020, 21:23

Теги

Похожие вопросы