LINUX.ORG.RU

ну сделай нормальный ps aux | grep и посмотри. или тебе принципиально чтобы твой многострочник кто-то запустил и проверил?

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

моя непонимать, извините

user      4357  0.0  0.0  19992  3304 pts/0    S+   01:20   0:00 /bin/bash ./test-nc.sh
user      4360  0.0  0.0  19992   260 pts/0    S+   01:20   0:00 /bin/bash ./test-nc.sh
sudoapter ()

Потому что последняя часть конвейера у тебя выполняется в «subshell», что с точки зрения pgrep и ps выглядит как процесс с тем же ${0}, что и у родителя. Смотреть в таких случаях лучше через 'ps axf | less -S'. Попробуй добавить в начало 'shopt -s lastpipe' и посмотреть разницу.

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

Можно еще один небольшой вопрос?
Я взял пример отсюда: https://mnorin.com/fejkovy-j-smtp-server-na-bash.html
И убрал из него следующие строки:

...

QUIT*) # Окончание сессии

echo "221 2.0.0 Bye" > $S

# Находим запущенные нами процессы tail и netcat и убиваем их
# Без окончания этих процессов следующая сессия не запустится

# vvvv это убрал vvvv 
TAIL_PID=$(ps ax | grep "tail -f $S" | grep -v grep | cut -d' ' -f 1)
NETCAT_PID=$(ps ax | grep "netcat -l -p 25" | grep -v grep | cut -d' ' -f 1)
kill -9 $TAIL_PID $NETCAT_PID

# Выход в главную программу
return

...

И все отрабатывает нормально, сессия прекрасно перезапускается. Т.е. получается, что можно не убивать tail и netcat?

sudoapter ()
Последнее исправление: sudoapter (всего исправлений: 5)
Ответ на: комментарий от sudoapter

Вообще-то говоря, в твоём примере ввод «quit» не срабатывает, на самом деле nc завершается при попытке записи в уже закрытый (по завершению последнего члена) конвейера, либо по закрытию соединения клиентом. 'tail -f' вообще может завершится только схлопотав SIGPIPE по завершению nc. Кстати, корректно было бы 'tail -f -n +1'. Чтобы видеть, что реально происходит, натыкай отладочного вывода:

D () { echo "${@}" >&2 ; }
{ tail -f -n +1 "${p}" ; D tail-rc=${?} ; } | # и т.д. и т.п. ...

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

Да, tail получает SIGPIPE (tail-rc=141), запись в разорванное соединение, nc вернул 0. А если делать kill на tail, возвращает 137 (128+9). Спасибо большое.

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