如何查看“host”和类似命令的进程信息

如何查看“host”和类似命令的进程信息

我知道如何查看 Ubuntu 机器上的当前进程。例如,我可以留下一个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 运行一次:它有自己的内部计时器来重复该任务,但相同的进程会保留在那里,直到计数到期,或者根据选项杀死它。

Host是一个外部命令,不是内置的shell,所以这与子进程无关。但它运行了 50,000 次才能完成。当ps | grep寻找它时,它在进程表中的概率大概是1%。如果您也循环运行 ps,您最终可能会看到一些命中。运行两个诊断进程时,由于某些调度程序限制,进程的创建host可能永远不会与 ps 同步。

相关内容