-----------接上篇,本文开始介绍进程信息。
9、进程信息
依次来看下top展示的进程任务信息:
(1)PID:进程号,一个任务的进程号。
注意:top默认是显示的进程模式,也就是说一个创建了多个线程的程序不会被展开显示,而这个pid号是整个进程的pid。事实上,线程在内核中也是进程,它也是有唯一pid。因为不管是进程还是线程,在内核中通通都用task_struct表示。Top没有展开线程模式的时候,这个pid号对应内核的tgid。
Tgid为是thread group id,也就是说一个多线程的进程,相当于一个group,这个组里面有一个leader,那么这个leader的pid就是整个进程的tgid。所以我们从top上看到的进程pid是线程组id,也就是tgid。Top -H命令来展开线程模式,这样我们就可以看到每个任务的自己的pid了。
(2)User:运行这个进程的有效用户名。 (linux有很多种uid,如ruid、euid、suid等。这个用户名实际上对应EUID,effective user id,下面会讲到)
这个USER字段直接用户名称(字符串),而这个字符串是由用户的uid + /etc/passwd转换而来的。为什么呢?这是因为linux使用id来标示每一个用户,而实际的用户名称(字符串)保存在/etc/passwd文件中,当我们运行top的时候,top是先通过/proc/pid/status接口读出uid字段,然后在/etc/passwd文件中根据uid读出用户名。
Linux里面的User ID Definition,简称UID,是识别每个用户的一个ID号,而我们看到的用户名称通常只不过是作为一种人机接口的手段,符合人类阅读记忆,其实在linux内部完全可以用id来做管理/识别。
通常,UID的1到99通常是为特殊系统用户保留的,比如系统里的daemon, lp, ftp, news, mail,这些用户。而还有一个更特殊的用户UID=0,这个就是我们的超级用户root,没有比它更牛逼的了,有且仅有一个。
所以在linux系统中,非特权用户的uid(也就是一些普通用户)一般从100开始。但也有些特别的。比如Red-hat系统uid从500开始,centos系统从1000开始,总之不跟系统用户冲突就好。
看下red-hat服务器(Red-hat):
Passwd中的用户:(UID从500开始)
看下centos服务器(centos):