LINUX.ORG.RU

[bash] Как узнать PID-ы процессов запущенных в конвеере


0

1

Имеется примерно такой скрипт

# Запуск специального конвеера команд в фоне.
first-program | second-program | third-program &
PID_VAR=$!

# Здесь идёт некий код ...



# TODO. Здесь через некоторое время нужно завершить процессы из конвеера.
kill -s 15 ${PID_VAR}

Переменная PID_VAR сохранит PID последней програмы third-program.

first-program, second-program реагируют лишь на SIGTERM, SIGKILL.

Если этот конвеер перенести в отдельный баш скрипт. И запустить его в фоне.

ncat -l -k 127.0.0.1 20000 | ./read_and_print.sh | ncat -l -k 127.0.0.1 20010
То киланье этого скрипта не завершает запущенные процессы внутри этого скрипта. ncat-ы не завершаются.

Как узнать PID-ы процессов first-program, second-program ? Нужно корректно завершить этот конвеер через SIGTERM-ы.

Ответ на: комментарий от zolden

Background_conveer.sh

ncat -l -k 127.0.0.1 20000 | ./read_and_print.sh | ncat -l -k 127.0.0.1 20010

bash$ ./Background_conveer.sh &
[1] 7347

bash$ ps -A -O cmd | grep Back
 7347 /bin/sh ./Background_convee S pts/4    00:00:00 /bin/sh ./Background_conveer.sh

bash$ ps -A | grep ncat
 7348 pts/4    00:00:00 ncat
 7350 pts/4    00:00:00 ncat

Килаю

bash kill -s 15 7347

bash$
[1]+  Terminated              ./Background_conveer.s

Проверяю закрытие ncat-ов

bash$ ps -A | grep ncat
 7348 pts/4    00:00:00 ncat
 7350 pts/4    00:00:00 ncat

ncat-ы не закрылись.

someloruser ()

Попробуйте: PID_VAR=$!
После завершения одного из процессов (в данном случае последнего) остальные получат SIGPIPE и тоже закроются.

AITap ★★★★★ ()
Ответ на: комментарий от true_admin

ай, тебе другое нужно. Погугли, в advanced bash scripting guide было решение.

true_admin ★★★★★ ()

Решено

Решил с помощью команды «ps --ppid» показывающей PIDs всех деток

ps --ppid ${PID_VAR}

bash-3.1$ ps --ppid 7598
  PID TTY          TIME CMD
 7599 pts/6    00:00:00 ncat
 7600 pts/6    00:00:00 read_and_print.
 7601 pts/6    00:00:00 ncat

Всем спасибо за внимание и поддержку.

someloruser ()
Ответ на: комментарий от someloruser

Вы невнимательно прочитали моё сообщение
kill SINGAL -PID
минус перед пидом родителя потеряли.
Это всё выясняется при курении man kill

zolden ★★★★★ ()
Ответ на: комментарий от someloruser

Она думаю описана, но местами довольно неочевидно. Например в убунте: Negative PID values may be used to choose whole process groups; see the PGID column in ps command output, в сусе был более доходчивый пример

zolden ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.