0

我对 unix 命名管道有疑问。假设我们有一个程序 A 将他的输出写入管道(考虑 P),另一个程序(考虑 B)使用这个管道作为输入文件。问题是当程序 B 失败时如何从外部中断程序 A。情况类似于这个伪脚本:

mkfifo P
A -output P &
B -input P &
if ( $! != 0 ) //somehow interrupt A
4

1 回答 1

2

保留PID:

mkfifo P
A -output P &
pidA=$!
B -input P
if ( $? != 0 )
    kill $pidA

$!扩展为最近执行的后台命令的 PID。

$?扩展为退出代码。

请注意,要使其正常工作,您不能B在后台运行,因为您无法获取它的退出代码。

如果您仍想在后台运行它,请使用:

( B -input P || kill $pidA ) &
于 2012-08-29T13:04:15.017 回答