Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何使用管道中断程序_Shell - Fatal编程技术网

Shell 如何使用管道中断程序

Shell 如何使用管道中断程序,shell,Shell,我对unix命名管道有问题。 考虑我们有一个程序,把他的输出写入管道(考虑P), 另一个程序(考虑B)使用这个管道作为输入文件。问题是当程序B失败时,我如何从外部中断程序A。 情况类似于此伪脚本: mkfifo P A -output P & B -input P & if ( $! != 0 ) //somehow interrupt A 保持PID: mkfifo P A -output P & pidA=$! B -input P if ( $? != 0 )

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

mkfifo P
A -output P &
B -input P &
if ( $! != 0 ) //somehow interrupt A
保持PID:

mkfifo P
A -output P &
pidA=$!
B -input P
if ( $? != 0 )
    kill $pidA
$扩展到最近执行的后台命令的PID

$?
展开为退出代码

注意:要使其工作,您不能在后台运行
B
,因为您无法获取退出代码

如果仍要在后台运行,请使用:

( B -input P || kill $pidA ) &