簡體   English   中英

在bash腳本中控制可執行文件

[英]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
 ...

根據此輸出,我要:

  1. 啟動此執行
  2. “捕獲”輸出
  3. 如果第三列值達到-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)")
    }
 }'

有任何想法嗎 ?

提前致謝

我認為這種結構可以解決您的所有問題:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM