我有一个bash脚本,作为通过ssh登录的用户的默认shell。 它提供了一个菜单,其中包含几个使用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 builtin对已关闭的stdin进行轮询的情况。为了解决read builtin中的错误,我在一个新的bash中生成它(bash -c“read -t 3 dummy”)。
答案 0 :(得分:0)
父母PiD会改变吗?如果是这样,您可以在进程列表中查找父进程并确保进程名称正确。
答案 1 :(得分:0)
我写过类似的应用程序。在shell中拥有更多代码会很有帮助。我认为可能有一种方法可以用不同的方式编写整个程序,以解决这个问题。