我需要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.
jwo*_*der 17
在Bash中,^C
可以echo
通过写入将a 作为参数传递给命令行(并因此传递给回显)$'\cc'
.因此,所需的命令是:
echo $'\cc' | ./program_that_does_not_terminate