Я пытаюсь получить PID от игровой книги. Я нашел один грубый подход, я пытаюсь сделать его более изысканным и надежным. Если я запускаю следующую команду find
+ awk
, она дает мне все PID ansible-playbook
пользователем. Хотя это также дает мне несколько поддельных PID, и мне нужно их удалить.
Например: 4229 - это действительный PID, и он мне нужен, тогда как 19425 - устаревший PID (отсутствует в выводе ps -eaf), и мне нужно удалить его из моего списка.
Toвизуально просмотрите файлы с именами PID:
meta@monk:~/.ansible/tmp>ls -lrt
total 8
drwx------ 2 monk admin4096 Oct 16 13:09 ansible-local-19425A_62FT
drwx------ 3 monk admin4096 Oct 17 10:38 ansible-local-4229U_pXdg
meta@monk:~/.ansible/tmp>
Чтобы извлечь имена PID:
meta@monk:~/.ansible/tmp>find . -type d |awk 'NR>1{pid=gensub(/.\/ansible-local-([0-9]+)._.*$/,"\\1","g",$NF);print pid}'
4229
4229
19425
Чтобы проверить, активен ли PID:
meta@monk:~>ps -eaf |grep -iE '4229|4229|19425'
monk 4229 2179 5 10:33 pts/26 00:00:49 /usr/local/bin/python /usr/local/bin/ansible-playbook pid.yml -vv
monk 5303 4229 0 10:38 pts/26 00:00:00 /usr/local/bin/python /usr/local/bin/ansible-playbook pid.yml -vv
monk 5744 5569 0 10:49 pts/3 00:00:00 grep -iE 4229|4229|19425
meta@monk:~>
Требуется только 4229, поскольку 19425 ушло из ps -eaf
вывода.
Вопрос:
Как объединить find
, awk
,и ps -eaf
эффективно выводят команду 4229
?
Кстати, я пробовал более простые решения, представленные в Получить pid работающей пьесы для использования в playbook , дажедобавлена щедрость, но радости пока нет. Поэтому, пожалуйста, не отмечайте его как дубликат, так как это расширение этого вопроса.