Объясните-f опцию в pgrep

Основная идея о том же. Символьная ссылка является специальным файлом, который содержит путь (относительный или абсолютный) к другому объекту файловой системы. В UNIX/Linux сама ОС обрабатывает символьную ссылку, решая к реальному объекту прозрачно.

На Mac псевдоним, кажется, специальная конструкция Средства поиска, может сослаться на удаленные объекты, а также локальные, но Средство поиска разрешает ссылку, не ОС. MacOS X также имеет символьные ссылки, но они являются отдельными от псевдонимов.

Большая разница между ярлыком Windows и символьной ссылкой. Ярлык Windows не может легко заменить программу, потому что Windows всегда должен иметь эти противные расширения файла, и "lnk" файл не является исполняемым файлом когда дело доходит до Windows. В GUI это работает, но с точки зрения сервера, это блюет. То же с каталогом. Они полезны, но не имеют в какой-либо степени власть и гибкость символьной ссылки.

5
23.01.2013, 21:02
2 ответа

Это означает это без -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 атрибута процесса, который мог утверждать, что был именем процесса:

  • Базовое имя исполняемого файла, который был передан последнему execve (2) системный вызов, который сделал процесс. На Linux, который используется для инициализации имени процесса, как сообщается ps или найденный в /proc/$pid/stat. Однако нужно отметить, что на Linux, это может быть изменено с помощью prctl(PR_SET_NAME...).
  • любой путь к исполняемому файлу, который в настоящее время является mmapредактор для выполнения в процессе и предпочтительно пути, поскольку это было вызвано (для сценариев, которые будут путем, обеспеченным в строке хижины, например). На Linux можно получить его с a readlink или /proc/$pid/exe. Тот, Вы не можете измениться, не называя другого execve (хотя Вы могли в теории загружать новый исполняемый файл в памяти и выполнять ее код без вызова execve, посмотрите, например, некоторые попытки пространства пользователя execve).
  • Первый аргумент провел execve системный вызов. Условно, тот аргумент предназначен, чтобы сказать приложению его имя для уведомления его, как вести себя соответственно так часто, что предназначено именем процесса. На Linux это может быть найдено в /proc/$pid/cmdline, но процесс может также изменить его путем изменения памяти, которой указывают argv[0].

Нужно также отметить, что существует большое изменение среди Нельдов различия.

10
27.01.2020, 20:37
  • 1
    , который Вы записали" (где первым аргументом (argv [0]) является не обязательно то же как название команды)". Первым аргументом являются пути, отличающиеся, чем право названия команды? Например, когда Вы действительно спали, 2000 и, "2000" является первым аргументом команде "сон ". Я пропускаю что-то фундаментальное здесь? –  Geek 24.01.2013, 06:03
  • 2
    , что делает" $!" часть в PS-fp $! указать? –  Geek 24.01.2013, 06:04
  • 3
    @Geek, зависит, как Вы хотите рассчитать. Во "сне 2000", Вы называете "/usr/bin/sleep" с двумя аргументами: "спите" и "2000". Теперь, можно хотеть назвать их 1-ми и 2-ми аргументами или 0th и 1-ми аргументами начиная с 0th, каждого рассматривает особенно большинство приложений (и не так как аргумент, на который они должны реагировать, но тот, который говорит им их имя). $! PID последней команды, выполненной в фоне. –  Stéphane Chazelas 24.01.2013, 09:26

когда Вы ps -f Вы будете видеть больше деталей о процессах включая связанные команды и обрабатывать информацию. Когда Вы pgrep -f это будет искать ту дополнительную информацию для соответствия запросу в противоположность тому, что отображено, когда Вы просто используете ps или ps -e

-3
27.01.2020, 20:37

Теги

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