Como encontrar o arquivo .pid para um determinado processo

14

Estou configurando o monit e quero monitorar um determinado aplicativo python. A Monit faz isso olhando os arquivos .pid para processos, mas não sei onde isso seria.

Eu também tentei criar meu próprio executável simples e executá-lo - aqui também não consigo descobrir onde o arquivo .pid é criado.

E todos os processos têm um arquivo .pid?

    
por Yarin 15.08.2012 / 19:57

2 respostas

14

Você normalmente encontrará os arquivos PID para processos daemonized em /var/run/ em sistemas no estilo Redhat / CentOS.

Além disso, você sempre pode procurar no script de inicialização do processo. Por exemplo, o daemon SSH é iniciado com o script em /etc/init.d/sshd . Às vezes o PID será definido lá (procure por pid, PID, PIDFILE, PID_FILE, etc.).

No entanto, a maioria dos outros daemons em sistemas no estilo RHEL fornecem o script /etc/init.d/functions para alguns recursos comuns.

# Set $pid to pids from /var/run* for {program}.  $pid should be declared
# local in the caller.
# Returns LSB exit code for the 'status' action.
__pids_var_run() {
        local base=${1##*/}
        local pid_file=${2:-/var/run/$base.pid}

Para qualquer coisa que origine /etc/init.d/functions , o PID viverá em /var/run/*.pid .

Para aplicativos personalizados, o PID será definido em um script de wrapper (esperançosamente). A maioria dos desenvolvedores que conheço segue a mesma convenção dos daemons acima.

Se você fizer encontrar algo sem um arquivo PID, lembre-se de que Monit pode monitorar em uma cadeia de caracteres de processo bem .

    
por 15.08.2012 / 20:09
1

Outra abordagem que tomei:

Eu tenho um servidor de banco de dados em execução no modo incorporado e os dados estão no diretório do aplicativo que os contém.

O banco de dados tem algo como um arquivo .pid, mas o chama de arquivo de bloqueio. Para localizar esse arquivo de bloqueio, listei todos os arquivos mantidos abertos pelo aplicativo:

$ ls -l /proc/18264/fd | cut -d'>' -f2

Isso me deu uma longa lista, incluindo sockets, pipes, arquivos do servidor, etc. Poucos filtros e eu cheguei ao que precisava:

$ ls -l /proc/18264/fd | cut -d'>' -f2 | grep /home/ | cut -b40- | sort | uniq | grep titan

/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/00000000.jdb
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0.lck
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.lck
    
por 07.12.2016 / 15:39