运行一段时间后向程序发送退出键(Q + Enter)

运行一段时间后向程序发送退出键(Q + Enter)

某些终端程序具有退出键安全地停止它们的执行,例如:

Q+Enter

这个问题我了解到该timeout命令允许在指定的时间后向程序发送信号,但据我所知,这些信号都不等同于我所指的退出按键。

可以使用以下命令显示信号列表kill -l

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

我想在一段时间后将退出按键(echo字母q)发送到程序,以便安全地停止程序。

我该怎么做?

答案1

按键和信号是与程序通信的两种不同方式。如果某个程序有一个相当于按键的信号,那是因为该程序的作者就是这样设计的。

终端本身会将一些键转换为信号,例如Ctrl+C转换为 SIGINT。该程序可以更改终端设置以捕获这些击键本身,而不是让终端将它们转换为信号。相同的终端机制允许使用密钥(通常Ctrl+D)转换为输入的末尾(仅当在行首按下该键时)。这不是一个信号:它意味着程序在尝试从终端读取输入时收到文件结束指示。

当终端消失时,内核会向终端中运行的前台程序(如果有)发送 SIGHUP 信号(如果是 shell,则 shell 会将信号重新发送到其前台作业)。 HUP 来自“(调制解调器)挂起”,在现代世界中适用于关闭 GUI 中的终端窗口等情况。许多程序都会捕获此信号并安全关闭,因此如果发送信号比发送输入更方便,您应该尝试这是否适用于您的程序。

如果必须发送输入,最简单的方法是运行程序屏幕并用于screen -X将输入发送到屏幕会话(例子)。

答案2

您可以$ consumer << DOCUMENT在 bash 中使用输入。如果您希望输入具有良好的延迟,您可能需要在将输入的命令传送到程序之前读取(并分析)在线输入的命令。

analyze <<END
<your timed command>

相关内容