以下の質問をしたところ、非常に近い答えが見つかりましたが、後でそれが機能しないことに気付きました。私はperlでパイプを使用しています。しかし、パイプを介して条件に到達する前に、関数の実行が完了します。10本のバナナが通過したらプロセスを停止するために、実行時に正確な秒でチェックする方法はありますか
こんにちは、私はこれを試しました...しかし、うまくいきません...プロセスは、停止する機会を得る前に終了しています。pidでプロセスの流れを実際に制御できるものはありませんか。つまり、10 本のバナナが終わったことに気付く前に、23 本のバナナが交差しました。パイプの流れは実際のプロセスよりも遅いと推測しています
私がやりたいのは、すでに実行中のプロセスに遅延を追加することだけです。コマンド 1 アウト コマンド 2 アウト バナナ これで、バナナを解析して、プロセスに 5 秒の遅延を設定できます。遅延を挿入すると、その時間内に perl スクリプトを実行し、時間内にスクリプトを停止できます。
私の質問を明確にするために:私が書いたコード:
my $pid = open my $pipe, '-|', 'commandA | tee banana.foo'
or die "Error opening pipe from commandA: $!\n";
# open my $pipe, 'commandA | tee result |'
# or die "Error opening pipe from commandA: $!\n";
print "$pid\n";
my $n = 0;
while (<$pipe>) {
$n++ if /banana/;
last if $n > 0;
print "pipestring\n";
}
kill 'INT', $pid;
close $pipe; # kills the command with SIGPIPE if it's not done yet
if ($n eq 1) {
print "commandA printed 'banana'\n";
}
else
{
print "nothing happened\n";
}
banana.foo ( actual result ) | banana.foo (expected result)
one | one
two | two
three | three
banana | banana
four
five
だから私は最後の2つの値を望まず、プログラムを停止させたい. commandA は次のとおりです。
echo one
echo two
echo three
echo banana
echo four
echo five
重要な編集: 私が目指しているのは、デバッガーの作成です。誰かが、オープン ソース デバッガーまたはプロセスを制御するその他のコードを持っています。