输入命令时ps aux
,输出的每一列是什么意思?例如:
$ ps aux
timothy 29217 0.0 0.0 11916 4560 pts/21 S+ 08:15 0:00 pine
root 29505 0.0 0.0 38196 2728 ? Ss Mar07 0:00 sshd: can [priv]
can 29529 0.0 0.0 38332 1904 ? S Mar07 0:00 sshd: can@notty
Run Code Online (Sandbox Code Playgroud)
感谢致敬!
如果我在磁盘上有同一个应用程序的多个副本,并且只有一个正在运行,如我所见ps
,我如何知道将其与其他应用程序区分开来的绝对路径?
恕我直言,ps -u
显示了一个非常有用的输出,比ps -u $USER
:
$ ps -u
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
elastic 234897 0.0 0.0 105980 1336 pts/2 S+ Oct10 0:00 /bin/bash ./run.sh collector-json-1.conf
elastic 234899 48.7 7.1 10087120 4433104 pts/2 Sl+ Oct10 2804:11 /usr/java/jdk1.7.0_09_x64/bin/java -Xmx6144m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatin
:
Run Code Online (Sandbox Code Playgroud)
相比
$ ps -u $USER
PID TTY TIME CMD
234897 pts/2 00:00:00 run.sh
234899 pts/2 1-22:44:04 java
: …
Run Code Online (Sandbox Code Playgroud) 如何让给定进程产生的整个进程树显示为树,并且只有该树,即没有其他进程?
输出可能看起来像
4378 ? Ss 0:10 SCREEN
4897 pts/16 Ss 0:00 \_ -/bin/bash
25667 pts/16 S+ 0:00 | \_ git diff
25669 pts/16 S+ 0:00 | \_ less -FRSX
11118 pts/32 Ss+ 0:00 \_ -/bin/bash
11123 pts/32 S+ 0:00 \_ vi
Run Code Online (Sandbox Code Playgroud)
我无法仅使用ps
.
以下给出了所需的结果,但似乎有点涉及:
#!/bin/bash
pidtree() {
echo -n $1 " "
for _child in $(ps -o pid --no-headers --ppid $1); do
echo -n $_child `pidtree $_child` " "
done
}
ps f `pidtree 4378`
Run Code Online (Sandbox Code Playgroud)
有没有人有更简单的解决方案?
在执行ps aux
命令时,我看到一些进程被列为Ss
,Ssl
和Sl
。
这些是什么意思?
root 24653 0.0 0.0 2256 8 ? Ss Apr12 0:00 /bin/bash -c /usr/bin/python /var/python/report_watchman.py
root 24654 0.0 0.0 74412 88 ? Sl Apr12 0:01 /usr/bin/python /var/python/report_watchman.py
root 21976 0.0 0.0 2256 8 ? Ss Apr14 0:00 /bin/bash -c /usr/bin/python /var/python/report_watchman.py
root 21977 0.0 0.0 73628 88 ? Sl Apr14 0:01 /usr/bin/python /var/python/report_watchman.py
Run Code Online (Sandbox Code Playgroud) 我拼凑了一个命令来返回正在运行的守护进程的进程 ID:
ps aux | grep daemon_name | awk "{ print \$2 }"
Run Code Online (Sandbox Code Playgroud)
它完美地工作并返回PID,但它也返回第二个PID,这可能是我现在正在运行的进程。有没有办法从返回的 PID 列表中排除我的命令?
我已经对其进行了几次测试,看起来我的命令始终是列表中的第二个 PID,但我不想只获取第一个 PID,以防它不准确。
当我这样做时,ps -ef|grep python
我得到以下信息:
myusername 4492 2994 0 10:32 pts/0 00:00:01 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root 6665 1 0 10:42 ? 00:00:00 /usr/bin/python /usr/lib/system-service/system-service-d
myusername 14051 13497 0 11:28 pts/7 00:00:00 grep --color=auto python
Run Code Online (Sandbox Code Playgroud)
如何仅获取运行该进程的用户、进程的pid和命令,如下面的输出所示?
myusername 4492 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root 6665 /usr/bin/python /usr/lib/system-service/system-service-d
Run Code Online (Sandbox Code Playgroud) 执行ps ux
返回一个很好的进程信息列表,很容易grep
通过 或watch
。但是,内存使用输出似乎没有太大的灵活性;的RSS
(驻留集大小)被印刷在KB,这对于大的流程是难以阅读(尤其是一目了然),和%MEM
给出100
× RSS
/ system_memory
。
该du
实用程序有一个可爱的-h
标志,可以以更加用户友好的方式打印空间。我一直无法找到任何等效的ps
. 有没有特殊的格式化技巧可以做到这一点?
在 *nix 中,您可以ps
查看正在运行的进程。但是如果一个可执行文件在一个设备中有多个同名文件,我们就无法确定它是从哪里调用的。
这与我关于这个主题的最后一个问题略有不同。 如何知道正在运行的进程的绝对路径?
我知道在 Linux 中它的pstree
命令非常有用,我正在寻找类似的东西......但是如何在 Windows 终端上制作详细的进程列表(树)?