为啥“htop”会显示我的应用程序正在使用的几十个 PID,而“ps”只显示一个?
Posted
技术标签:
【中文标题】为啥“htop”会显示我的应用程序正在使用的几十个 PID,而“ps”只显示一个?【英文标题】:Why does "htop" show me dozens of PIDs in use by my app, but "ps" only shows me one?为什么“htop”会显示我的应用程序正在使用的几十个 PID,而“ps”只显示一个? 【发布时间】:2014-09-19 02:33:38 【问题描述】:我有一个正在开发的 Clojure 应用程序。我正在服务器上对其进行测试,主要是通过进入“屏幕”会话并输入:
java -jar lo_login_service-0.2-standalone.jar
然后我按 Control-C 杀死它。然后我做一些改变。然后我再次测试它。
我假设只有 1 个 PID 正在使用中。如果我这样做:
ps aux
我只看到 1 个 PID 在使用中:
das 15028 0.2 22.1 1185300 133520 pts/5 Sl+ Jul26 3:19 java -jar lo_login_service-0.2-standalone.jar
但如果我运行“htop”,我会看到:
15029 das 20 0 1157M 130M 9960 S 0.0 22.2 0:25.85 java -jar lo_login_service-0.2-standalone.jar
15030 das 20 0 1157M 130M 9960 S 0.0 22.2 0:07.29 java -jar lo_login_service-0.2-standalone.jar
15031 das 20 0 1157M 130M 9960 S 0.0 22.2 0:00.02 java -jar lo_login_service-0.2-standalone.jar
15032 das 20 0 1157M 130M 9960 S 0.0 22.2 0:00.25 java -jar lo_login_service-0.2-standalone.jar
15033 das 20 0 1157M 130M 9960 S 0.0 22.2 0:00.00 java -jar lo_login_service-0.2-standalone.jar
15034 das 20 0 1157M 130M 9960 S 0.0 22.2 0:14.68 java -jar lo_login_service-0.2-standalone.jar
15035 das 20 0 1157M 130M 9960 S 0.0 22.2 0:11.46 java -jar lo_login_service-0.2-standalone.jar
15036 das 20 0 1157M 130M 9960 S 0.0 22.2 0:00.00 java -jar lo_login_service-0.2-standalone.jar
15038 das 20 0 1157M 130M 9960 S 0.0 22.2 0:08.46 java -jar lo_login_service-0.2-standalone.jar
15039 das 20 0 1157M 130M 9960 S 0.0 22.2 0:04.50 java -jar lo_login_service-0.2-standalone.jar
15040 das 20 0 1157M 130M 9960 S 0.0 22.2 0:14.81 java -jar lo_login_service-0.2-standalone.jar
15041 das 20 0 1157M 130M 9960 S 0.0 22.2 0:03.93 java -jar lo_login_service-0.2-standalone.jar
15042 das 20 0 1157M 130M 9960 S 0.0 22.2 0:00.09 java -jar lo_login_service-0.2-standalone.jar
15043 das 20 0 1157M 130M 9960 S 0.0 22.2 0:00.00 java -jar lo_login_service-0.2-standalone.jar
15044 das 20 0 1157M 130M 9960 S 0.0 22.2 0:00.00 java -jar lo_login_service-0.2-standalone.jar
15045 das 20 0 1157M 130M 9960 S 0.0 22.2 0:00.00 java -jar lo_login_service-0.2-standalone.jar
15046 das 20 0 1157M 130M 9960 S 0.0 22.2 0:00.00 java -jar lo_login_service-0.2-standalone.jar
15047 das 20 0 1157M 130M 9960 S 0.0 22.2 0:00.00 java -jar lo_login_service-0.2-standalone.jar
15048 das 20 0 1157M 130M 9960 S 0.0 22.2 0:00.00 java -jar lo_login_service-0.2-standalone.jar
为什么 htop 显示这么多正在使用的 PID?
【问题讨论】:
【参考方案1】:这些可能是您的应用程序使用的线程。要仅显示进程,您可以按F2
(设置)>Display options
>Hide userland threads
>F10
(保存)。
您可以在此处查看隐藏/显示用户线程的示例(它们在此处显示为树,因为启用了同一菜单中的选项 Tree view
):
编辑:我忘了提到 PID 列中的数字不是线程的 PID,而是内核线程“ID”(不确定这是否是正确的术语)。使用上图的场景作为源,你会在/proc/2321/tasks
找到它们:
$ ls /proc/2321/task
2321 2323 2325 2326 2327
【讨论】:
谢谢你,但数字是多少? 15029、15031 等。它们看起来与 PID 完全一样。但是线程没有 PID。 ***作者在这里! @Salem 的回答是正确的。线程具有 TID,其工作方式与 PID 类似。请参阅man 5 proc
了解更多信息。以上是关于为啥“htop”会显示我的应用程序正在使用的几十个 PID,而“ps”只显示一个?的主要内容,如果未能解决你的问题,请参考以下文章