【发布时间】:2019-08-01 16:51:42
【问题描述】:
我有一个交互式命令行程序,它在运行时会生成文本。我要做的是运行程序,通过 perl 正则表达式提取文本,然后终止程序。
/path/to/my/program | perl regex magic
到目前为止,我有上面的行。它启动程序并从程序的输出中提取文本。问题是在我提取文本后,/path/to/my/program 继续运行。我需要终止该进程,因为我不再需要它。我希望我的行看起来像下面的行:
/path/to/my/program | perl regex magic | terminate original process
其中原始进程是通过运行 /path/to/my/program 创建的进程
TLDR; 如何使用 bash 在同一行中启动一个进程并终止它?
我尝试将程序的输入模拟为 control-c (ascii 0x3),但它实际上输入了“^C”,而不是模拟我在键盘上物理按下 control c。
【问题讨论】:
-
管道是异步的;
program和perl同时运行,而不是一个接一个。您的第三个组件也会同时启动,可能会在您的程序有机会做任何事情之前杀死您的程序。管道不是这里的答案。 -
^C 没有输入任何程序;您的 终端 拦截它并将其解释为向当前前台进程组中的每个进程发送
SIGINT的请求。
标签: bash shell command-line