開始されたプロセスの出力をパイプできますか? [コピー]

開始されたプロセスの出力をパイプできますか? [コピー]

私が起動したと仮定すると、program標準出力にいくつかの出力を書き込む作業が進みます。パイプラインが生成する行数を計算できるようにパイプラインを追加する方法はありますかwc -l

ベストアンサー1

Linuxではこれを行うことができます。スクリプトがあるとしますs

#!/bin/bash
i=0
echo my pid: "$$"
while true; do
    echo "$i"; ((i++)); sleep 1; 
done

走る:

$ ./s
my pid: 8815
0
1
2

それはすべてです。これでgdbプロセスに接続する必要があります。

gdb -p 8815

ここで以下を実行してくださいgdb

p close(1)

これにより、STDOUTファイル記述子が閉じます。次に、新しいアイテムを開きます。

p creat("/tmp/8815.out", 0600)

他の端末では、既に読み取りプロセスを設定できます。

tail -f /tmp/8815.out

gdb他の端末から切り離す必要があるため、まだ進行がありません。 +CtlまたはD:

q
Quit anyway? (y or n) 

y使用して確認してくださいEnter。これで、次の内容が表示されます(tailwhere run)。

173
174
175

既存のファイルまたはパイプを使用するには、次の手順に従ってくださいgdb

p open("/path/to/your/output", 1)

これはSTDOUTリダイレクトを示しています。数字が2であることを除いて、STDERRに似ています。


私は次の2つの答えを使用しました。

おすすめ記事