「host」などのコマンドに関するプロセス情報を表示する方法

「host」などのコマンドに関するプロセス情報を表示する方法

Ubuntuシステムで現在のプロセスを表示する方法を知っています。たとえば、1つを実行状態にすることができますping

ping localhost

次に、次のようにします。

$ ps -ef | grep ping

これは次のことを示します。

user1      2875    1231  0 Feb08 ?        00:00:03 /usr/libexec/gsd-housekeeping
user2     96834   43257  0 14:21 pts/4    00:00:00 ping localhost
root       96837   63560  0 14:21 pts/1    00:00:00 grep --color=auto ping

しかし、コマンドはどうですかhost?ループで実行しています。

for i in {1..50000}; do host localhost; done

次に、次のようにします。

$ps aux | grep host

しかし、私が得るものは次のとおりです。

root       98021   63560  0 14:24 pts/1    00:00:00 grep --color=auto host

はい、rootで試してみました!もちろん、名前解決者を見ることができますが、常にオンになっています。

$ ps -ef | grep resolv
systemd+    1015       1  0 Feb08 ?        00:00:17 /lib/systemd/systemd-resolved

host私も見なければなりませんか/usr/bin/host

ところで、同じですls。私はこれらのコマンドが少し特別で「組み込み」であることを知っていますが、他のプロセスのように扱われると思いました。cd実際の実行ファイルとは異なります。私は走ったstrace

execve("/usr/bin/host", ["host", "localhost"], 0x7ffdf51ee518 /* 58 vars */) = 0
brk(NULL)                               = 0x559cc809a000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffd20032c70) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
...

それを説明するものは何も見えません。私が逃したものは何ですか? !理解を深めるのを助けてくれてありがとう!

ベストアンサー1

pingは一度実行されます。タスクを繰り返すための独自の内部タイマーがありますが、同じプロセスは、回数が期限切れになるか、オプションに従って終了するまでそのまま残ります。

ホストは組み込みシェルではなく外部コマンドなので、子プロセスとは何の関係もありません。しかし、完了するには50,000回の実行が必要でした。探してみると、ps | grepプロセステーブルにいる確率は約1%程度だ。ループでpsを実行すると、最終的にいくつかのヒットが表示されることがあります。 2つの診断プロセスを実行すると、特定のスケジューラの制限により、プロセス生成がhostpsと同期しないことがあります。

おすすめ記事