「w」はurandomで何をするのでしょうか?

「w」はurandomで何をするのでしょうか?
> strace w 2>&1 | grep urandom
read(4, "/usr/bin/grep\0urandom\0", 2047) = 22
> 

「w」にはなぜ urandom が必要なのでしょうか? これを回避するにはどうすればよいでしょうか?

アップデート:

> strace w 2>&1 | awk '/urandom/'
read(4, "awk\0/urandom/\0", 2047)       = 14
> 

ということは、urandom と関係があるのはフィルタリングですか?

> strace who 2>&1 | grep urandom
> 

では、なぜ「誰」は影響を受けないのでしょうか?

答え1

マンページよりw(1):

現在マシン上にいるユーザーに関する情報を表示します。およびそのプロセス

ユーザーのプロセスを表示するには、マシン上で実行されているすべてのプロセスを調べます。これを試してみましょう:

$ strace -o w.trace w | grep whatever

トレース内には次のような行が見つかります (Linux システムの場合)。

open("/proc/8286/cmdline", O_RDONLY)    = 4
read(4, "grep\0whatever\0", 2047)       = 14

これは、すべてのプロセス (および表示されていないその他のもの) のコマンド ラインをw明示的に調べて確認することを示しています。これは、それと並行して実行される を見つけて、それが何であるかを確認します。パイプは、両方のプロセスを同時に開始すること以外、これとは何の関係もありません。ある意味では、grep 自体を確認するのと似ています。/procgrepstraceps | grep

who他のほとんどのコマンドはプロセスに関する情報を必要とせず、検索も行わないので、プロセスを追跡しても同じ情報は表示されません。

答え2

他の回答やコメントで説明されているように、あなたが観察している理由はパイプの処理方法です。同様の状況で本当に必要なものをフィルタリングするには、引数の最初の文字を次のようにBash囲んでみてください。grep[]

$ strace w 2>&1 | grep random
read(4, "grep\0random\0", 2047)         = 12
$ strace w 2>&1 | grep '[r]andom'
$ strace w 2>&1 | grep '[c]lose'
close(3)                                = 0
close(3)                                = 0
close(3)                                = 0
close(3)                                = 0
close(3)                                = 0
close(3)                                = 0
(...)

編集:

正しく指摘されているようにR.の中に下記にコメントしてください実際にはstraceパイプの反対側は見えません。同様に、出力にps aux | grep grep もディレクトリ内を移動して そこでプロセスを見つけると表示されます。grep grepw/procgrep

関連情報