Это означает это без -f
, pgrep
только поиски обеспеченного regexp на названия команды, в то время как с -f
это ищет его в их аргументах (где первый аргумент (argv[0]
) не обязательно то же как название команды).
$ sleep 2000 &
[1] 15768
$ pgrep 2000
$ pgrep -f 2000
15768
И если мы вызываем argv[0]
отличаться от названия команды (на Linux, как замечено в /proc/$pid/stat
) как тогда, когда с помощью zsh
ARGV0
:
$ ARGV0=foo sleep 2000 &
[2] 15881
$ ps -fp $!
UID PID PPID C STIME TTY TIME CMD
chazelas 15881 13126 0 19:55 pts/1 00:00:00 foo 2000
$ ps -o comm= $!
sleep
$ awk '{print $2}' /proc/$!/stat
(sleep)
$ pgrep foo
$ pgrep sleep
15881
$ pgrep -f sleep
$ pgrep -f foo
15881
Существует много потенциального беспорядка относительно имени процесса на Unix и Linux. Существует 3 атрибута процесса, который мог утверждать, что был именем процесса:
ps
или найденный в /proc/$pid/stat
. Однако нужно отметить, что на Linux, это может быть изменено с помощью prctl(PR_SET_NAME...)
.mmap
редактор для выполнения в процессе и предпочтительно пути, поскольку это было вызвано (для сценариев, которые будут путем, обеспеченным в строке хижины, например). На Linux можно получить его с a readlink
или /proc/$pid/exe
. Тот, Вы не можете измениться, не называя другого execve
(хотя Вы могли в теории загружать новый исполняемый файл в памяти и выполнять ее код без вызова execve
, посмотрите, например, некоторые попытки пространства пользователя execve)./proc/$pid/cmdline
, но процесс может также изменить его путем изменения памяти, которой указывают argv[0]
.Нужно также отметить, что существует большое изменение среди Нельдов различия.
Жесткие ссылки на каталоги не существенно отличаются от жестких ссылок для файлов. На самом деле много файловых систем действительно имеют жесткие ссылки на каталогах, но только очень дисциплинированным способом.
В файловой системе, которая не позволяет пользователям создавать жесткие ссылки на каталоги, ссылки каталога точно
.
запись в самом каталоге;..
записи во всех каталогах, которые имеют этот каталог как их родителя;..
точки к.Дополнительное ограничение в таких файловых системах состоит в том что из любого каталога, после ..
узлы должны в конечном счете привести к корню. Это гарантирует, что файловая система представлена как единственное дерево. Это ограничение нарушено в файловых системах, которые позволяют жесткие ссылки на каталоги.
Файловые системы, которые позволяют жесткие ссылки на каталоги, позволяют больше случаев, чем три выше. Однако они поддерживают ограничение, что эти случаи действительно существуют: каталог .
всегда существует и указывает на себя; каталог ..
всегда точки к каталогу, который имеет его как запись. Удаление связи с записью каталога, которая является каталогом только, удаляет его, если он не содержит записи кроме .
и ..
.
Таким образом свисание ..
не может произойти. То, что может пойти не так, как надо, - то, что часть файловой системы может стать отдельной. Если каталог ..
указывая на одного из его потомков, так, чтобы ../../../..
в конечном счете формирует цикл. (Как замечено выше, файловые системы, которые не позволяют манипуляции жесткой ссылкой, предотвращают это.), Если все пути от корня до такого каталога являются несвязанными, часть файловой системы, содержащей этот каталог, не может больше достигаться, если нет процессы, которые все еще имеют их текущий каталог на нем. Та часть не может даже быть удалена, так как нет никакого способа достигнуть ее.
GCFS позволяет жесткие ссылки каталога и запускает сборщик "мусора" для удаления таких отдельных частей файловой системы. Необходимо считать его спецификацию, которая обращается проблемам в деталях. Это - интересное интеллектуальное осуществление, но я не знаю ни о какой файловой системе, это используется на практике, который обеспечивает сборку "мусора".
Твердое соединение каталог (при разрешении) работы почти так же столь же трудно связывающийся простой файл. Так, твердое соединение всегда увеличивает число каналов одним, и таким образом, в Вашем вопросе № 1 число каналов увеличилось бы от 2 до 3.
Вопросом № 2 является немного больше изгиба ума, и он зависит от как умный rmdir
. Обычно, если Вы удаляете каталог a/b/c
, “rmdir” программа удаляет связь
a/b/c/.
- inode 400a/b/c/..
- inode 300a/b/c
- inode 400Но помните- c
и H
тот же каталог (inode), таким образом, это могло бы быть более точно для переструктурирования вышеупомянутого списка как
(inode 400)/.
- inode 400(inode 400)/..
- inode 300(inode 300)/c
- inode 400Другими словами, .
и ..
записи будут удалены из inode 400 (известный как a/b/c
и a/h
), таким образом, Ваше предположение рассматриваемый № 2 может быть неправильным – каталог H
мог бы продолжить существовать, но быть абсолютно пустыми (даже любой .
и ..
записи).
Но другая возможность состоит в том, что “rmdir” будет видеть что число каналов на c
3 и мог бы удалить связь только a/b/c
, а не записи в c
(inode 400). В этом случае думайте, как это работает с простыми файлами. (Я предполагаю, что Вы в основном понимаете это.)
Если Вы создаете файл antelope
, жесткая ссылка это к gazelle
, и затем удалите antelope
, файл все еще существует под именем gazelle
.
Если Вы создаете файл dir1/antelope
, жесткая ссылка это к dir2/gazelle
, и затем удалите dir1/antelope
, файл все еще существует под именем dir2/gazelle
.
Хорошо, замена b
для antelope
, a
для dir1
, ..
для gazelle
, и H
для dir2
. Затем H/..
(inode 300) продолжил бы существовать с числом каналов 1, но (как в другом сценарии) это будет абсолютно пусто (даже любой .
и ..
записи).
Этот вид путаницы - то, почему трудно связывающимся каталогам сильно препятствуют.
.
и ..
- в некоторой реализации функции. Быть ' препятствовавшимся' для использования функции является одной вещью (как, ей препятствуют для работы как root
на *отклоняют поле для обычной работы), но механика функции, дизайна позади нее, является другим. Мой вопрос был больше на дизайне функции и побочных эффектов (если таковые имеются), если это поддерживалось системой и если пользователь был a root
пользователь. Например, как учебник описал бы эту функцию, несмотря на протесты, которые будут идти с ним?
– Harry
12.01.2014, 03:24
..
точки к B затем B содержат запись для A.
– Gilles 'SO- stop being evil'
12.01.2014, 03:38
a/b/c/d
, затем dir a/b/c
, и наконец dir a/b
. Так, мой вопрос - мудр дизайном - что должно произойти с процессом, который имел ранее cd
редактор самостоятельно в a/H
но теперь попытки a cd ..
? Не уверенный, если я следовал за Вашим последним предложением: не B всегда содержат запись для A?
– Harry
12.01.2014, 03:48
a/H
жесткая ссылка на a/b/c
, таким образом, они - тот же inode (#400). И inode 400 содержит записи (.
, 400), (..
, 300), и возможно (d
, 500), если Вы еще не удалили его. Так a/H
имеет a ..
запись, которая указывает на inode 300, который доступен от корня файловой системы как a/b
. Но, если Вы удалили a/b/c
, затем inode 300 (a/b
) больше не содержит запись для inode 400.
– Scott
12.01.2014, 23:05