Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
Linux bash脚本中的控件可执行文件_Linux_Bash - Fatal编程技术网

Linux bash脚本中的控件可执行文件

Linux bash脚本中的控件可执行文件,linux,bash,Linux,Bash,首先,我不知道如何搜索我想做的事情 我有一个exec,它在终端(Linux)中生成输出。 让我们用一个简单的C程序A::< /P> #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); } } 根据这些输

首先,我不知道如何搜索我想做的事情

我有一个exec,它在终端(Linux)中生成输出。 让我们用一个简单的C程序A::< /P>
#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);
  }
}
根据这些输出,我想:

  • 启动此exec
  • “捕获”输出
  • 如果第三列值达到-0.5,停止/终止执行
  • 你将如何做到这一点

    例如,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)")
        }
     }'
    
    #/bin/sh
    程序=./a.out
    $PROG>输出&
    progpid=$!
    (tail-fn 0输出和echo$!>tailpid)| awk-v progpid=$progpid'{
    
    如果($3我认为这种结构可以解决您的所有问题:

    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)")
        }
    }'
    
    programname>输出&
    progpid=$!
    (tail-fn 0输出&echo$!>tailpid)| awk-v progpid=$progpid'{
    如果(条件){
    系统(“杀死”程序PID)
    系统(##更新其他文件)
    
    系统(“杀死$(第1-3点与之类似。对于第4点,您可能可以使用
    sed
    来更改文件,对于第5点,您可以将整个过程置于bash循环中。不确定这个问题是否足够具体,可以按原样回答……您是要监视正在运行的可执行文件的输出并对每一行执行不同的操作,还是对文件中的每一行执行不同的操作包含输出,或者以某种方式处理整个收集的输出?您的问题不是很清楚。如何“停止执行”"?我很好奇,缓冲是否会允许受控进程在检测到停止条件并将其终止之前运行。虽然问题没有具体说明让它继续运行是否会产生不希望的副作用。我也在想同样的事情,很可能会发生,但如果你真的需要良好的c级别,那么最终会发生control您需要将其写入您的程序中!@chepner-如果您想建议-9参数不适合作为注释,但仅从其他人的答案中编辑它是不合适的。
    kill-9
    对于普通用法是绝对不必要的。如果您的程序没有响应TERM信号(好的,你可能需要一个中断),这个程序有严重的问题,远远超出了这个问题的范围。我不介意对记录进行编辑,kill-9确实是不必要的,在这里删除了它
    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)")
        }
    }'