当我搜索一些不存在的进程时,例如
$ ps aux | grep fnord
wayne 15745 0.0 0.0 13580 928 pts/6 S+ 03:58 0:00 grep fnord
Run Code Online (Sandbox Code Playgroud)
显然我不关心 grep - 这和搜索ps过程一样有意义!
如何防止 grep 出现在结果中?
在 ps xf
26395 pts/78 Ss 0:00 \_ bash
27016 pts/78 Sl+ 0:04 | \_ unicorn_rails master -c config/unicorn.rb
27042 pts/78 Sl+ 0:00 | \_ unicorn_rails worker[0] -c config/unicorn.rb
Run Code Online (Sandbox Code Playgroud)
在 中htop,它显示为:

为什么 htop 显示的进程比 ps 多?
ps aux似乎很方便地列出了所有进程及其状态和资源使用情况(Linux/BSD/MacOS),但是我无法理解aux使用man ps.
什么aux意思?
我想查看 Linux 中由特定用户或用户组创建的进程列表我可以使用ps命令来做到这一点还是有任何其他命令来实现这一点?
我从来没有真正考虑过 shell 是如何实际执行管道命令的。我一直被告知“一个程序的标准输出通过管道传输到另一个程序的标准输入中”,这是对管道的一种思考方式。所以很自然地,我认为在 say 的情况下,A | B,A将首先运行,然后B获取 的标准输出A,并使用标准输出A作为其输入。
但我注意到,当人们搜索特定的工艺ps,他们会包括grep -v "grep"在命令的末尾,以确保grep不会出现在最终的输出。
这意味着在命令ps aux | grep "bash" | grep -v "grep"中暗示ps知道grep正在运行,因此在ps. 但是如果ps在它的输出通过管道传输到 之前完成运行,它grep怎么知道它grep正在运行?
flamingtoast@FTOAST-UBUNTU: ~$ ps | grep ".*"
PID TTY TIME CMD
3773 pts/0 00:00:00 bash
3784 pts/0 00:00:00 ps
3785 pts/0 00:00:00 grep
Run Code Online (Sandbox Code Playgroud) 如何使用进程名称从正在运行的进程中获取命令参数或整个命令行?
例如这个过程:
# ps
PID USER TIME COMMAND
1452 root 0:00 /sbin/udhcpc -b -T 1 -A 12 -i eth0 -p /var/run/udhcpc.eth0.pid
Run Code Online (Sandbox Code Playgroud)
我想要的是/sbin/udhcpc -b -T 1 -A 12 -i eth0 -p /var/run/udhcpc.eth0.pid或争论。我知道进程名称并想要它的参数。我在 SliTaz 上使用 Busybox。
前段时间我注意到curl作为命令行参数提供的用户名和密码没有出现在ps输出中(尽管它们当然可能出现在您的 bash 历史记录中)。
它们同样不会出现在/proc/PID/cmdline.
(不过,可以推导出组合的用户名/密码参数的长度。)
演示如下:
[root@localhost ~]# nc -l 80 &
[1] 3342
[root@localhost ~]# curl -u iamsam:samiam localhost &
[2] 3343
[root@localhost ~]# GET / HTTP/1.1
Authorization: Basic aWFtc2FtOnNhbWlhbQ==
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Host: localhost
Accept: */*
[1]+ Stopped nc -l 80
[root@localhost ~]# jobs
[1]+ Stopped nc -l 80
[2]- Running curl -u iamsam:samiam localhost &
[root@localhost ~]# ps -ef | grep curl
root 3343 3258 0 …Run Code Online (Sandbox Code Playgroud) $ ps -Awwo pid,comm,args
PID COMMAND COMMAND
1 init /sbin/init
2 kthreadd [kthreadd]
3 ksoftirqd/0 [ksoftirqd/0]
5 kworker/u:0 [kworker/u:0]
6 migration/0 [migration/0]
7 cpuset [cpuset]
8 khelper [khelper]
9 netns [netns]
10 sync_supers [sync_supers]
11 bdi-default [bdi-default]
12 kintegrityd [kintegrityd]
13 kblockd [kblockd]
14 kacpid [kacpid]
15 kacpi_notify [kacpi_notify]
16 kacpi_hotplug [kacpi_hotplug]
17 ata_sff [ata_sff]
18 khubd [khubd]
Run Code Online (Sandbox Code Playgroud)
括号是什么意思?args 是否总是返回进程命令的完整路径(例如/bin/cat)?