Основная идея о том же. Символьная ссылка является специальным файлом, который содержит путь (относительный или абсолютный) к другому объекту файловой системы. В UNIX/Linux сама ОС обрабатывает символьную ссылку, решая к реальному объекту прозрачно.
На Mac псевдоним, кажется, специальная конструкция Средства поиска, может сослаться на удаленные объекты, а также локальные, но Средство поиска разрешает ссылку, не ОС. MacOS X также имеет символьные ссылки, но они являются отдельными от псевдонимов.
Большая разница между ярлыком Windows и символьной ссылкой. Ярлык Windows не может легко заменить программу, потому что Windows всегда должен иметь эти противные расширения файла, и "lnk" файл не является исполняемым файлом когда дело доходит до Windows. В GUI это работает, но с точки зрения сервера, это блюет. То же с каталогом. Они полезны, но не имеют в какой-либо степени власть и гибкость символьной ссылки.
Это означает это без -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]
.Нужно также отметить, что существует большое изменение среди Нельдов различия.
когда Вы ps -f
Вы будете видеть больше деталей о процессах включая связанные команды и обрабатывать информацию. Когда Вы pgrep -f
это будет искать ту дополнительную информацию для соответствия запросу в противоположность тому, что отображено, когда Вы просто используете ps
или ps -e
$!
PID последней команды, выполненной в фоне. – Stéphane Chazelas 24.01.2013, 09:26