Как получить только родительский PID процесса и исключить связанные с ним дочерние процессы с помощью grep

Я пишу ansible playbook, который пойдет и убьет PID.

Я нашел хороший ответ, который имел отношение ко мне: https://stackoverflow.com/a/46541018/8863970

Однако первый шаг, который в моем случае Get running processes, у меня есть два следующих процесса:

# when i do: ps -ef | grep appp.py

ubuntu   17765     1  2 12:14 pts/0    00:00:04 python appp.py 
ubuntu   17784 17765  4 12:15 pts/0    00:00:05 /home/ubuntu/venvs/myvnv/bin/python /home/ubuntu/deploy/appp.py 
ubuntu   17844 14784  0 12:17 pts/0    00:00:00 grep --color=auto appp.py

Он убивает 17765, а затем терпит неудачу:

failed: [10.10.1.1] (item=17784) => {"ansible_loop_var": "item", "changed": true, "cmd": "kill 17784", "delta": "0:00:00.002196", "end": "2020-04-26 12:23:22.833284", "item": "17784", "msg": "non-zero return code", "rc": 1, "start": "2020-04-26 12:23:22.831088", "stderr": "/bin/sh: 1: kill: No such process", "stderr_lines": ["/bin/sh: 1: kill: No such process"], "stdout": "", "stdout_lines": []}

Это значит... он не может найти 17784, чтобы убить.

Вопрос: как мне получить только родительский PID (17784) с помощью ps grep, а затем передать его, чтобы убить?


person Saffik    schedule 26.04.2020    source источник
comment
Может быть, просто пусть ваше приложение Python напишет где-нибудь pid и использует его, а не пытается найти его с помощью ps и grep. Или напишите модуль systemd для запуска вашего приложения Python, чтобы вы могли просто использовать systemctl stop ..., чтобы остановить его.   -  person larsks    schedule 26.04.2020
comment
Угадайте, что.... Если вы решите эту первую проблему, она снова выдаст ошибку при следующем pid 17844, соответствующем текущей команде grep, которую вы используете, ведь она больше не существует. Я предлагаю вам вернуться к вопросу, на который вы ссылались в первую очередь, и прочитать второй ответ, который решает вашу проблему => используйте pkill, а не grep + kill. Сначала вы можете проверить свое выражение с помощью pgrep. Между тем, лучшее решение — следовать комментариям @larsks выше.   -  person Zeitounator    schedule 26.04.2020


Ответы (1)


Так это до конца | грэп -в грэп

person Carl Andrews    schedule 26.04.2020