linux – 为什么`超时2超时1 bash`卡住了

linux – 为什么`超时2超时1 bash`卡住了,第1张

概述我正在研究 Linux shell中的timeout命令. 当我尝试超时1 bash时,bash会运行并在1秒后被杀死. 当我尝试超时2超时1是,程序是将运行1秒并被第二次超时杀死. 但是当我尝试超时2超时1 bash时,它被卡住了.即使我按下Ctrl C,也不会显示bash shell并继续运行. 我知道在一个命令中写两个超时是没用的. 我只是想知道为什么会这样. 这是相同行为的另一个例子: s 我正在研究 Linux shell中的timeout命令.

当我尝试超时1 bash时,bash会运行并在1秒后被杀死.

当我尝试超时2超时1是,程序是将运行1秒并被第二次超时杀死.

但是当我尝试超时2超时1 bash时,它被卡住了.即使我按下Ctrl C,也不会显示bash shell并继续运行.

我知道在一个命令中写两个超时是没用的.

我只是想知道为什么会这样.

解决方法 这是相同行为的另一个例子:

strace timeout 1 bash
即使你打断了strace,bash也会继续运行.

如果我们在同一时间内对bash进程进行了分析,我们会注意到以下循环.

— SIGTTIN {si_signo=SIGTTIN,si_code=SI_USER,si_pID=7162,si_uID=1000} — rt_sigaction(SIGTTIN,{sa_handler=SIG_IGN,
sa_mask=[],sa_flags=SA_RESTORER,sa_restorer=0x7f097723a7e0},
{sa_handler=SIG_DFL,sa_mask=[],
sa_restorer=0x7f097723a7e0},8) = 0 ioctl(255,TIocgPGRP,[6412])
= 0 rt_sigaction(SIGTTIN,{sa_handler=SIG_DFL,
{sa_handler=SIG_IGN,8) = 0 kill(0,SIGTTIN)
= 0

现在,根据http://www.gnu.org/software/libc/manual/html_node/Job-Control-Signals.html

Macro: int SIGTTIN

A process cannot read from the user’s terminal while it is running as a background job. When any process in a background job trIEs to
read from the terminal,all of the processes in the job are sent a
SIGTTIN signal. The default action for this signal is to stop the
process. For more information about how this interacts with the
terminal driver,see Access to the Terminal.

timeout 2 timeout –foreground 1 bash工作,因为内部超时将允许它使用tty,尽管它不是直接从交互式shell运行.

男子超时

--foreground          when not running timeout directly from a shell prompt,allow COMMAND to read from the TTY and get TTY signals; in this mode,children of COMMAND will not be timed out

我们可以根据需要链接尽可能多的超时,只要从交互式shell运行的所有超时都使用–foreground选项:

超时3超时 – 前景2超时 – 前景1 bash

同时检查man bash中的SIGNALS部分,了解bash在不同情况下如何对各种信号做出反应的更多信息.

总结

以上是内存溢出为你收集整理的linux – 为什么`超时2超时1 bash`卡住了全部内容,希望文章能够帮你解决linux – 为什么`超时2超时1 bash`卡住了所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1029689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存