私の言葉はこれ実行中の他のプロセスの標準出力を監視できるかどうかを調べる質問です。以下を使用して提案された答えの1つですtail -f /proc/<PID>/fd/1
。それで、これを試してみるために2つのターミナルセッションを開きました。最初の端末はecho PIDを使用しますecho $$
。 2番目の端末では、root権限なしでtailコマンドを実行しました。その後、最初の端末のIOで顕著な停止現象が見つかりました(シェル入力が中断され、顕著なキー押下遅延が発生しました)。なぜこれが起こるのですか?
Ubuntu 18.04を実行しています。
答え1
ランニングはstrace tail -f /proc/<PID>/fd/1
手がかりを提供します。
出力の最後の行には、tail
コマンドがプロセスからの読み取りを待っていることが示されます。
読む(3、
元のプロセスに入ると、一部の文字がプロセスに表示され、一部の文字がstrace
コマンド出力に表示されます。たとえば、元のプロセスに「1234」と入力すると、元のプロセスには24が表示され、出力には次の行が表示されることがありますstrace
。
読み取り(3,"1",8192)=1
読み取り(3,"3",8192)=1
tail
なしで実行するときは明確ではありませんが、strace
コマンドtail
は元のプロセスと競合して入力内容にアクセスします。