Linux进程管理

在使用linux的时候 , 进程管理是必须要掌握的技能 , 下面从几个方面介绍下进程管理相关知识点 。
进程分类

  • 前台进程:
该程序运行行 , 就占据了命令提示符;
  • 后台进程:
启动之后 , 释放命令提示符 , 后续的操作在后台执行;
从前台到后台:
当使用Ctrl+z 后该进程会放到后台 , 并停止运行;
如果想让它在后台继续运行 , 则可以使用bg命令:
# bgjob_id这个job_id是使用jobs命令来查看的 。每个放到后台的进程都有一个作业号 。
[root@ns2 ~]# jobs [1]+ suspendedsleep 3600[root@ns2 ~]# 作业号:
+:有+号的表示命令默认操作的作业;
-:有-号的表示命令将第二个执行的操作;
把后台的进程拿到前台来执行:
# fgjob_id终止某个作业:
# kill%job_id//注意这里的这个%一定不能省;进程状态D:不可中断的睡眠 , 通常是I/0操作;R:运行或就绪 , 在运行队列上;S:可中断的睡眠 , (等待一个事件的结束)T:停止Z:僵死<:高优先级进程N:低优先级进程+:前台进程组中的进程(和终端相关的)l:多线程进程s:会话进程首进程 PS命令ps - report a snapshot of the current processes 给当前进程生成一个快照;可以理解成process status
ps命令支持两种不同风格的参数 , BSD和UNIX;
  • BSD风格:不加-
[root@ns2 ~]# ps aux|headUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.1 10368 668 ? Ss 10:26 0:01 init [3]root 2 0.0 0.0 0 0 ? S< 10:26 0:00 [migration/0]root 3 0.0 0.0 0 0 ? SN 10:26 0:00 [ksoftirqd/0]root 4 0.0 0.0 0 0 ? S< 10:26 0:18 [events/0]root 5 0.0 0.0 0 0 ? S< 10:26 0:00 [khelper]root 10 0.0 0.0 0 0 ? S< 10:26 0:00 [kthread]root 14 0.0 0.0 0 0 ? S< 10:26 0:00 [kblockd/0]root 15 0.0 0.0 0 0 ? S< 10:26 0:00 [kacpid]root 186 0.0 0.0 0 0 ? S< 10:26 0:00 [cqueue/0][root@ns2 ~]#USER:表示运行此进程的用户
PID:表示此进程的进程号
%CPU:表示此进程占用CPU的百分比
%MEM:表示此进程占用内存的百分比
VSZ:此进程占用的虚拟内存大小 , 单位KB
virtual memory size of the process in KiB (1024-byte units). Device mAppings are currently excluded; this is subject to change.
RSS:此进程占用常住内存大小 , 不包括swapped的大小 , 也就是物理内存的大小 , 单位KB
resident set size, the non-swapped physical memory that a task has used (in kiloBytes).
TTY:表示此进程所属的终端 , ?表示不属于任何终端;
STAT:该进程的状态;
START:表示此进程的启动时间 , 
TIME 占用CPU的累积时长;
accumulated cpu time, user + system. The display format is usually "MMM:SS", but can be shifted to the right if the process used more than 999 minutes of cpu time.
COMMAND:是哪个命令启动的该进程 , 如果命令是被[]包起来的 , 则表示是内核进程;
  • UNIX风格:必须加-
例如:ps -elf
-e Select all processes. Identical to -A 显示所有的进程 , 和-A选项是一样的 , 所以也可以写在:ps -Alf
-l long format. The -y option is often useful with this. 使用长行格式显示 , 
-f does full-format listing. This option can be combined with many other UNIX-style options to add additional columns.就是说使用比较全的格式来显示 , 这样可以显示更多的信息;
[root@ns2 ~]# ps -elf|headF S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD4 S root 1 0 0 75 0 - 2592 - 10:26 ? 00:00:01 init [3]1 S root 2 1 0 -40 - - 0 migrat 10:26 ? 00:00:00 [migration/0]1 S root 3 1 0 94 19 - 0 ksofti 10:26 ? 00:00:00 [ksoftirqd/0]1 S root 4 1 0 70 -5 - 0 worker 10:26 ? 00:00:19 [events/0]1 S root 5 1 0 70 -5 - 0 worker 10:26 ? 00:00:00 [khelper]5 S root 10 1 0 74 -5 - 0 worker 10:26 ? 00:00:00 [kthread]1 S root 14 10 0 70 -5 - 0 worker 10:26 ? 00:00:00 [kblockd/0]1 S root 15 10 0 80 -5 - 0 worker 10:26 ? 00:00:00 [kacpid]1 S root 186 10 0 77 -5 - 0 worker 10:26 ? 00:00:00 [cqueue/0][root@ns2 ~]#-U|u :显示属于指定的用户名或用户UID的进程 。-u:表示的是有效的UID , 比如:当Jack用户正在执行passwd在修改自己的密码 , 那么此时 , 用pgrep -u jack passwd并不能看到 , 因为passwd是有SUID的 , 此时该进程的执行者已经是root了 。如果使用-U就可以显示出jack;


推荐阅读