linux timeout,select timeout

Linux 无法停止含有timeout命令的脚本

在使用timeout命令的脚本中遇到无法通过Ctrl+ C中断执行的问题。执行bash exec_test.sh指令后,信号只发送给了前台进程组,而timeout命令所在的进程组不属于前台进程组,因此无法收到中断信号。

原因在于timeout命令将自身放入新的进程组,该进程组id(pgid)等于自身pid。此机制允许timeout命令的后代进程位于同一进程组中,当超时时,可以向每个进程发送终止信号。同时,timeout进程与父进程不在同一进程组,因此不会影响父进程继续执行。

为了解决此问题,需要在前台进程设置trap命令,捕获中断信号SIGINT后向pgid=pid的进程组发送中断信号。这里的pid变量值为$!,即shell最后运行的后台进程的pid。

通过源码可知,timeout核心机制利用了内核的alarm接口实现,详情可查阅man alarm。

综上所述,要使Ctrl+ C产生的信号能够发送给timeout进程组,需在前台进程设置trap命令,捕获到中断信号SIGINT,然后向pgid=pid的进程组发送中断信号,以使timeout进程组能够接收到中断信号并终止执行。

ping 的-w:timeout详解是什么

w timeout Timeout in milliseconds to wait for each reply.

按毫秒记每一个应答的超时时间。1000毫秒=1秒

比如说,我的网络很差,延迟很大,我打开www.tengxun.com。

如果我将超时时间设置很短如10毫秒,那么如果发出一个数据包10毫秒内没有收到应答包的话,就给出请求超时的提示。但是如果我将超时时间设置为100000毫秒,就是100秒。

ping www.tengxun.com-w 1000是使用的方式。

timeout命令如何在运行指定时间后发送信号并终止进程

timeout命令在Linux系统中扮演着关键角色,它的主要功能是启动指定命令,如果该命令在预设的时间内未能完成执行,timeout将自动中止其进程。这个实用工具是GNU核心工具包的一部分,几乎在所有Linux发行版中都能找到。

timeout命令的使用方式十分灵活,其基本语法格式是timeout [参数]。常见的参数包括:-s用于指定超时时要发送的信号,例如SIGKILL,-k则设置了达到时间限制后的强制结束机制,而--foreground则表示在前台模式下运行命令。

例如,要向ping命令发送SIGKILL信号并设定5秒超时,命令如下:timeout-s SIGKILL 5s ping www.linuxprobe.com。如果你想让一个命令在1分钟内运行,但允许在10秒后自动停止,可以使用这样的命令:timeout-k 10s 1m sh linuxcool.sh。如果你想在前台实时监控命令执行,可以使用timeout--foreground 5m./linuxcool.sh。

总的来说,timeout命令为管理命令运行提供了灵活的超时控制,确保了系统的效率和资源的有效利用。

阅读剩余
THE END