[英]Control executable in bash script
首先,我不知道如何搜索我想做的事。
我有一个exec在终端(Linux)中产生输出。 让我们来看一个简单的C程序a.out:
#include <stdio.h>
int main (int argc, char *argv[]) {
int i=0;
float j=0;
for(i=0; i<=10000000;i++)
{
j = i*-1e-5;
printf (" %d 2.0 %f 4.0 5.0\n",i,j);
}
}
产生的输出如下:
0 2.0 -0.000000 4.0 5.0
1 2.0 -0.000010 4.0 5.0
2 2.0 -0.000020 4.0 5.0
3 2.0 -0.000030 4.0 5.0
...
根据此输出,我要:
您将如何做?
例如,exec不会通过以下脚本exec.sh停止:
#/bin/sh
PROG=./a.out
$PROG > output &
progpid=$!
(tail -fn 0 output & echo $! > tailpid ) | awk -v progpid=$progpid '{
if($3<=-0.5){
system("kill "progpid)
# system( ##update other file )
system("kill $(<tailpid)")
}
}'
有任何想法吗 ?
提前致谢
我认为这种结构可以解决您的所有问题:
programname > output &
progpid=$!
(tail -fn 0 output & echo $! > tailpid ) | awk -v progpid=$progpid '{
if( condition ) {
system("kill "progpid)
system( ##update other file )
system("kill $(<tailpid)")
}
}'
我们在后台运行程序,并将输出重定向到output
。 然后,我们使用tail -f
选项监视output
更新时的output
,该选项在添加行时从文件末尾读取行。 然后,将其通过管道传递给awk
,如果条件满足,该命令可以运行系统命令来终止程序进程,然后运行另一个命令来更新单独文本文件中的参数,然后运行另一个命令来杀死tail
,从而不会tail
永远挂在后台(一旦tail
被杀死, awk
也会退出)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.