[英]How to know from a bash script if the user abruptly closes ssh session
我有一个bash脚本,用作用户通过槽ssh登录的默认外壳程序。 它提供了一个菜单,其中包含多个选项,其中之一是使用netcat发送文件。
我正在使用的嵌入式Linux的netcat缺少-w选项,因此,如果用户关闭ssh连接而不发送文件,则netcat命令将永远等待。
我需要知道用户是否突然关闭连接,以便脚本可以杀死netcat命令并正常退出。
到目前为止我尝试过的事情:
编辑:
我将尝试回答评论中的问题,并进一步说明情况。
我的代码是:
nc -l -p 7576 > /dev/null 2>> $LOGFILE < $TMP_DIR/$BACKUP_FILE &
wait
我忽略了SIGINT和SIGTSTP,但是我试图捕获所有信号,并且收到的唯一信号是SIGCONT。
阅读bash手册页后,我发现应将SIGHUP发送到脚本和netcat,并将SIGCONT发送到已停止的作业,以确保它们接收到SIGHUP。
我猜该等待使脚本计数为已停止,因此它接收到SIGCONT,但与此同时,等待以某种方式吞噬了SIGHUP。
因此,我尝试更改等待睡眠的时间,然后同时收到SIGHUP和SIGCONT。
问题是:为什么等待会阻止SIGHUP?
编辑2:解决
我解决了使用-t选项使用内置的read来轮询封闭的stdin的问题。 要解决内置读取操作中的错误,我以新的bash(bash -c“读取-t 3虚拟对象”)生成了它。
父PiD是否更改? 如果是这样,您可以在进程列表中查找父级,并确保进程名称正确。
我已经写过类似的应用程序。 在shell中包含更多代码将很有帮助。 我认为可能有一种方法可以解决这个问题,从而编写不同的整体程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.