Como obtenho o pid do programa exato lançado?

1

Então eu tenho alguns programas python dizendo programa A e programa B, ao usar "pgrep python" para obter o pid, ele me dá o pid do programa A e do programa B. No entanto, estou escrevendo um programa que precisa para encontrar o pid do programa B, mas não o programa A. Meu plano é fazer com que o programa execute um consolemand, "pgrep" para obter o pid. No entanto, uma vez que recebe os dois pids, e não pode dizer a diferença entre os dois (que eu conheço)

Então, como posso garantir que recebo o pid do Programa B, mas não o programa A?

    
por user3346931 25.09.2015 / 20:27

1 resposta

1

Uma opção é que o processo que inicia o Programa B pode recuperar o PID depois de fazer isso e salvá-lo em um arquivo em algum lugar (por exemplo, /var/run/ geralmente contém esses arquivos X.pid ). Uma maneira de fazer isso é lançar o Programa B de um script em segundo plano e, em seguida, inspecionar a variável do shell $! , da seguinte forma:

ProgramB &
B_PID=$!

Geralmente, com essa estratégia, o arquivo X.pid pode ficar obsoleto, ou seja, o processo iniciado pode morrer sem o arquivo X.pid ser removido e esse PID pode até ser reciclado para algum outro processo. Se o Programa B não tiver sido lançado nesse meio tempo, o arquivo X.pid não terá sido atualizado, então você deve verificar se existe um processo com o PID armazenado no arquivo X.pid , e também que esse processo tem o nome do comando que você está esperando.

Outra estratégia é inspecionar os argumentos com os quais o Programa B é relatado como tendo sido iniciado. Você pode obter ps ou pgrep para fornecer essa informação. Como um comentador diz, o sinalizador a ser usado para pgrep é -f .

    
por 25.09.2015 / 20:46