gpt4 book ai didi

linux - 为什么 `timeout 2 timeout 1 bash`卡住了

转载 作者:IT王子 更新时间:2023-10-29 00:37:21 29 4
gpt4 key购买 nike

我正在研究 Linux shell 中的 timeout 命令。

当我尝试 timeout 1 bash 时,bash 将运行并在 1 秒后终止。

当我尝试 timeout 2 timeout 1 yes 时,程序 yes 将运行 1 秒并被第二个 timeout 杀死。

但是当我尝试 timeout 2 timeout 1 bash 时,它卡住了。没有出现 bash shell,即使我按 Ctrl+C,它也会继续运行。

我知道在一个命令中写两个timeout是没有用的。

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

最佳答案

这是相同行为的另一个例子:

strace 超时 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_flags=SA_RESTORER, sa_restorer=0x7f097723a7e0}, 8) = 0 ioctl(255, TIOCGPGRP, [6412])
= 0 rt_sigaction(SIGTTIN, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f097723a7e0}, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f097723a7e0}, 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 超时 --foreground 2 超时 --foreground 1 bash

另请查看 man bash 中的 SIGNALS 部分,了解有关 bash 在不同情况下如何对各种信号使用react的更多信息。

关于linux - 为什么 `timeout 2 timeout 1 bash`卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41032690/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com