sudo pgrep -f соответствует произвольным строкам и возвращает увеличение pids

При отладке связанной проблемы я заметил, что pgrep возвращал PID для кажущихся произвольными шаблонов командной строки, например:

$ sudo pgrep -f "asdf" 13017 $ sudo pgrep -f ";lkj" 13023 $ sudo pgrep -f "qwer" 13035 $ sudo pgrep -f "poiu" 13046 $ sudo pgrep -f "blahblahblah" 14038 $ sudo pgrep -f "$(pwgen 16 1)" 14219 

Та же команда без sudo ничего не возвращала (как и ожидалось):

 $ pgrep -f blahblahblah 

Я пытался подключить PID к ps, чтобы посмотреть, какая команда была, но это не сработало:

 $ sudo pgrep -f blahblahblah | xargs ps -f -p UID PID PPID C STIME TTY TIME CMD 

Похоже, что процесс заканчивается слишком быстро. Затем я попытался использовать ps и grep, но это тоже не сработало (т. Е. Результатов не было):

 $ sudo ps -e -f | grep [a]sdf $ sudo ps -e -o command | grep asdf grep asdf 

Я также заметил, что, если я достаточно быстро переуступлю команду, мне показалось, что PID неуклонно поднимался:

 $ for i in $(seq 1 10); do sudo pgrep -f $(pwgen 4 1); done 14072 14075 14078 14081 14084 14087 14090 14093 14096 14099 $ for i in $(seq 1 10); do sudo pgrep -f blahblahblah; done 13071 13073 13075 13077 13079 13081 13083 13085 13087 13089 

В качестве проверки работоспособности я попытался использовать find и grep для поиска каталога proc:

 $ sudo find /proc/ -regex '/proc/[0-9]+/cmdline' -exec grep adsfasdf {} \; Binary file /proc/14113/cmdline matches Binary file /proc/14114/cmdline matches $ sudo find /proc/ -regex '/proc/[0-9]+/cmdline' -exec grep adsfasdf {} \; Binary file /proc/14735/cmdline matches Binary file /proc/14736/cmdline matches 

Опять же кажется, что PID поднимается и что cmdline соответствует произвольным строкам.

Я пробовал это как на CentOS 6.7, так и на Ubuntu 12.04 с теми же результатами. Когда я попробовал подобные эксперименты на своем Mac, тесты вернулись отрицательно – никаких тайных процессов.

Что тут происходит?

2 Solutions collect form web for “sudo pgrep -f соответствует произвольным строкам и возвращает увеличение pids”

Он показывает процесс sudo то есть PID является PID процесса sudo который является родителем команды pgrep вы запускаете, помещая после sudo . Когда вы выполняете поиск во всей командной строке (по -f ), процесс sudo появляется на выходе, потому что строка (шаблон) также является частью исходной команды sudo .

Используя -l и -a (если ваша поддержка pgrep ), вы получите лучшую идею.

Контрольная работа:

 % sudo pgrep -af "asdf" 4560 sudo pgrep -af asdf % sudo pgrep -lf "asdf" 4562 sudo % pgrep -af "asdf" % 

Он находит вашу команду sudo потому что строка, которую вы ищете с помощью «-f», также присутствует в полном списке ps sudo.

В основном, когда вы запускаете sudo pgrep -f xyz вы запускаете

 PID1 sudo pgrep -f xyz PID2 pgrep -f xyz 

Команда pgrep найдет и то, и другое проигнорирует, и сообщит PID1 как соответствие.

Естественно, PID будут увеличиваться, потому что при каждом запуске есть новая команда sudo !

  • Сортировка вывода `ps`
  • Подавить предупреждение от ps -aux на Linux
  • Inetd и Xinetd: работает?
  • Использование ps и наблюдение за соблюдением родительского и дочернего процессов
  • Linux: см. Использование ЦП процессом за последнюю секунду
  • Проверьте процесс и убейте
  • Использование «ps -C java -o pid, user, cmd» Можно ли уменьшить вывод cmd?
  • Как сделать Ubuntu Linux 16.10 системным монитором?% Загрузка процессора согласуется с ps или top для процесса Firefox на четырехъядерном процессоре?
  • Когда начался процесс
  • разница между bash, -bash и / bin / bash в выпуске ps
  • Среди полей вывода команды «ps»% CPU не является фактическим использованием ЦП в этом процессе?
  • Linux и Unix - лучшая ОС в мире.