Почему pidof и pgrep ведут себя по-другому?

Я предложил бы использовать nss-myhostname. Это - nss плагин, который просто всегда разрешает Ваше текущее имя хоста, таким образом, нет никакой потребности изменить /etc/hosts.

Поскольку проблемой, которую Вы описываете, является просто проблема сопоставителя, можно зафиксировать ее при наличии надлежащей установки DNS, т.е. ourwebsiteLIVE.$DOMAIN просто твердость к IP машины.

8
25.10.2014, 06:47
3 ответа

pidof = найти идентификатор процесса запущенной программы

Pidof находит идентификаторы процесса (pid) названных программ. Он выводит этих идентификаторов на стандартный вывод. Эта программа в некоторых системах используется в сценариях изменения на уровне выполнения, особенно когда система имеет структуру rc, подобную System-V.

sysadmin@codewarden:~$ pidof apache2
5098 5095 5094 5092

pgrep = искать или сигнализировать о процессах на основе имени и других атрибутов, pgrep просматривает текущие запущенные процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора.

sysadmin@codewarden:~$ pgrep apache2
5092
5094
5095
5098

pgrep , (p) = process, grep = grep печатает совпадающие строки

Хотите узнать больше о pgrep и pidof? Просто запустите в терминале как

# man pidof
# man pgrep
7
27.01.2020, 20:12

Я думаю, вам не следует полагаться на pidof , это может привести к сбою вашей программы. Простой пример с программой supervisord :

% cuonglm at ~
% ps -ef | grep supervisord
root      8512     1  0 16:53 ?        00:00:00 /usr/bin/python /usr/bin/supervisord
cuonglm   8584  7688  0 17:00 pts/0    00:00:00 grep --color=auto supervisord
% cuonglm at ~
% pidof supervisord
% cuonglm at ~
% 

Как видите, супервизор на самом деле вызывается интерпретатором python, вызывает сбой pidof :

#! /usr/bin/python                                                            
# EASY-INSTALL-ENTRY-SCRIPT: 'supervisor==3.0a8','console_scripts','supervisord'
__requires__ = 'supervisor==3.0a8'                                            
import sys                                                                    
from pkg_resources import load_entry_point                                    

if __name__ == '__main__':                                                    
    sys.exit(                                                                 
        load_entry_point('supervisor==3.0a8', 'console_scripts', 'supervisord')()
    )
0
27.01.2020, 20:12

Команда pidof игнорирует сценарии, если вы не включили параметр -x . Кроме того, безопаснее всего включить полный путь в команду pidof, как в :

killme=$(pidof -x /usr/bin/supervisord)
      *instead of*
killme=$(pidof -x supervisord)

это сводит к минимуму вероятность совпадения с каким-либо другим процессом.

0
27.01.2020, 20:12

Теги

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