Как просматривать сообщения об отключении из приложения, запущенного с помощью сценария запуска, без привязки к нему

#shell #ssh #ipc

Вопрос:

Я не могу найти способ сделать то же самое в интерактивном и неинтерактивном сеансе ssh, чтобы сценарий запуска мог запустить процесс и позволить пользователю просматривать выходные данные.

Простой пример для воспроизведения проблемы, которую я использую-x на bash, чтобы показать команды оболочки отладки, которые имеют a впереди. :

start_ping_google.sh содержит

 #!/bin/bash -x
ping -c4 google.com amp; 
echo " I want to see this and the ping results"
sleep 2
echo "after I exit on this line I dont want to see more ping results" amp;amp; exit
 

Если пользователь запускает этот скрипт с помощью on box (интерактивный сеанс) и выходит из системы, как только скрипт завершается, это не влияет на разветвленный процесс (в данном случае ping). Пример

 $ ~/bin/start_ping_google.sh; exit
  echo ' I want to see this and the ping results'
 I want to see this and the ping results
  sleep 2
  ping -c20 google.com
PING google.com (142.250.80.46) 56(84) bytes of data.
64 bytes from lga34s34-in-f14.1e100.net (142.250.80.46): icmp_seq=1 ttl=109 time=28.6 ms
64 bytes from lga34s34-in-f14.1e100.net (142.250.80.46): icmp_seq=2 ttl=109 time=28.6 ms
  echo 'after I exit we dont care about ping messages'
after I exit we dont care about ping messages
  exit
logout
Connection to testbox12 closed.
 

При открытом другом терминале, если вы смотрите ( watch -n1 'ps auwwx | grep ping | grep -v grep' ), пинг продолжается до 20 пингов.

 Every 1.0s: ps auwwx | grep ping | grep -v grep                                                                                                   offtest8.s: Wed Sep 22 18:50:36 2021

user1       38679  0.0  0.0 132656  3760 ?        S    18:50   0:00 ping -c20 google.com
 

Это не то же самое, если вы делаете это в неинтерактивном сеансе. Пример

 $ ssh testbox12 "~/bin/start_ping_google.sh"
 I want to see this and the ping results
  echo ' I want to see this and the ping results'
  sleep 2
  ping -c20 google.com
PING google.com (142.250.80.110) 56(84) bytes of data.
64 bytes from lga34s36-in-f14.1e100.net (142.250.80.110): icmp_seq=1 ttl=110 time=31.0 ms
64 bytes from lga34s36-in-f14.1e100.net (142.250.80.110): icmp_seq=2 ttl=110 time=31.0 ms
after I exit we dont care about ping messages
  echo 'after I exit we dont care about ping messages'
  exit
64 bytes from lga34s36-in-f14.1e100.net (142.250.80.110): icmp_seq=3 ttl=110 time=31.0 ms
64 bytes from lga34s36-in-f14.1e100.net (142.250.80.110): icmp_seq=4 ttl=110 time=31.0 ms
64 bytes from lga34s36-in-f14.1e100.net (142.250.80.110): icmp_seq=5 ttl=110 time=31.0 ms
^CKilled by signal 2.
 

В этом случае я делаю ctrl C после еще 3 пингов после точки выхода. Затем пинг прекращается до того, как будет сделано 20 пингов.

Так что я понимаю, почему пинг умирает. Он пытается записать в stdout, но это было сорвано, когда я нажал CTRL C в сеансе ssh (внутри у него будет какая-то ошибка, например ошибка с плохим файловым дескриптором). Чего я не понимаю, так это почему этого не произошло во время интерактивной сессии.

Есть ли способ сделать это, если я не могу редактировать эти сценарии?