2016-10-20 1 views
0

xtermで2つの端末を起動すると、端末1の結果が私に必要なものを表示したときに、端末2のプロセスをフィルタリングして停止する方法を知りたいと思います。Bash:結果のプロセスを停止してフィルタリングする

サンプル例:端末1が ターミナル2内のいくつかの結果にアクティブprocessusがあまりにもアクティブprocessusとして起動されていると私は、端末1

に私が望む結果が得られるまでアクティブな端末ならば、停止しません1つの結果は、私が欲しいものを私に見せる、ターミナル2はすぐに停止します。

どうすればいいですか?

ありがとうございました。

+0

でそれを殺す[テレパシー能力が有効:]あなたTerm#1で起動したアプリケーションが正常に終了して終了したら、Term#2ウィンドウを閉じる必要がありますか? – hidefromkgb

+0

あなたはあなたのtermimal2を明確にすることができますか?あなたは1つのknow/Unknowプログラム、または多くのknow/unknowプログラムだけを実行しますか?第2期のあなたのプログラムは、インタラクティブに立ち上げる必要があるのでしょうか? – F4240

+0

端末2は対話的なコマンドであり、term1と2の間に特定のリンクはありませんが、term2のtimelifeはterm1に依存しています。たとえば、term1が "test succesfull" –

答えて

0

簡単な方法は、ファイルの項に1つの出力を書き込むことで、あなたがファイルに自分の殻をログに記録するscriptを使用することができます用語から2

端子1

をあなたのパターンを検索します。これらproccessesは$遅延の後にまだ生きている場合

$ script --flush -c program_to_monitor /path/to/log/file #e.g. /tmp/term1.log 

端子2

このスクリプトの検索語1ログファイルに継続的にあなたのパターン、設立ならば、それは送信、用語2内のすべてのプロセスにSIGTERMを送信しますSIGKILL。

kill_tty.sh: - 私は、彼らがより良い方法です確信している
psとBSDにいくつかの注意点を有していてもよい)

#!/usr/bin/env bash 
tty=$(tty) 
delay=2 
while true; do 
    if grep "your_pattern" $term1_log 2>/dev/null ; then 
    ps h -o pid --tty ${tty#/*/} | xargs kill #soft way 
    sleep ${delay}s 
    ps h -o pid --tty ${tty#/*/} | xargs -9 kill #hard way 
    fi 
done 

次に背景

$ ./kill_tty.sh /path/to/log/file & 

でそれを出せそれをしているが、それは作品です。

0

finaly私は必要なコマンドからになるまでループを作る別の方法で問題を解決し、

echo $! >/tmp/mypid.pid 

でPIDを受信し、

kill `cat /tmp/mypid.pid` 
関連する問題