回声控制C字符

qwe*_*rty 16 bash

我需要grep第三方程序的输出.此程序转储数据但不终止而不按^ c终止它.

我目前正在搜索并使用其pid查杀它.但是,我想知道是否有可能回应控制C字符.伪代码看起来像

echo ^c | ./program_that_does_not_terminate
Run Code Online (Sandbox Code Playgroud)

我可以在DOS中做这样的事情,所以在linux中必须有一种方法.

C:\>echo y | del C:\tmp\*
C:\tmp\*, Are you sure (Y/N)? y
C:\>
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 25

不,将CTRL-C字符输入到您的进程中将不起作用,因为终端捕获了CTRL-C键击并将其转换为发送到进程的终止信号.

CTRL-C的正确字符代码(ASCII格式)是代码编号3,但如果您将其回显给程序,它将只从标准输入中接收字符.它不会导致进程终止.

如果您想简化查找和终止进程的任务,可以使用以下内容:

./program_that_does_not_terminate &
pid=$!
sleep 20
kill ${pid}
Run Code Online (Sandbox Code Playgroud)

$! 将为您提供上次启动的后台进程的进程ID.

  • 或者`kill -s SIGINT`如果你想发送它Ctrl-C. (5认同)

jwo*_*der 17

在Bash中,^C可以echo通过写入将a 作为参数传递给命令行(并因此传递给回显)$'\cc'.因此,所需的命令是:

echo $'\cc' | ./program_that_does_not_terminate

  • 虽然这会将正确的键序列发送到程序,但它不会导致程序退出.像CTRL-C这样的信号处理是由终端而不是程序完成的. (2认同)