送信パイププロセスのPIDを取得します。

送信パイププロセスのPIDを取得します。

~のため

$ any-process | receiver

receiver転送プロセスのPIDを取得できますか?

ベストアンサー1

間接的。はい、しかし、接続されたパイプを識別し、接続されたパイプの他のすべてのPIDを検索する必要があります。

PIDが1730であるとしますreceiver。を見て/proc/self/fd/0(より簡単には/proc/self/fd/0)と表示されるシンボリックリンクを見ることができますpipe:[43270]/proc/1730/fdinfo/0。次に/proc/1729/fd/1Display as Symlinkを見つけてflagsで確認pipe:[43270]します。だからパイプの反対側を制御するプロセスを見つけます。/proc/1729/fdinfo/101

注:

  • これはLinuxに特化したアプローチで、移植性がなく非効率的です。
  • 複数のプロセスがそのパイプに書き込むことができます(また、書き込みがfd 1にある必要はありません)。
  • 競合状態が発生しやすい。
  • any-process他のユーザーが所有している場合は、そのファイルreceiver記述子を表示できません。

両方のプロセスが認証された方法で通信できるようにするには、Unixソケットを使用する必要があります。SO_PASSCREDオプションを使用すると、SCM_CREDENTIALS発信者の pid、uid、および gid タイプでセカンダリ メッセージを使用できます。送信者によって指定された資格情報はカーネルでチェックされ、うそではないことを確認します(適切な機能がない場合はルートプロセス/CAP_SYS_ADMIN会議自分とは異なるプロセスIDを指定する機能)

おすすめ記事