进程管理
进程是已启动的可执行程序示例,进程的特性有以下
1.已分配内存地址
2.安全属性:有其所有权凭据特权
3.一个或多个线程
4.进程状态:运行,休眠,暂停,僵死等状态
5.生命周期
…
在Linux不同版本系统进程都不相同
Centos5/6:init
Centos7:systemd
Centos:/usr/lib/systemd/systemd
查看静态进程及信息各字段含义
ps aux是Linux中查看静态进程属性的指令
ps aux | head -2 #查看进程头两行
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 1.0 0.9 172404 16388 ? Ss 23:34 0:01 /usr/lib/syst
项目 | Value |
---|---|
USER | 运行进程的用户 |
PID | 进程的ID |
%CPU | 进程的CPU占有率 |
%MEM | 进程的内存占有率 |
VSZ | 占用虚拟内存 |
RSS | 占用实际内存 |
TTY | 进程运行的终端 |
STAT | 进程状态 |
START | 进程的启动时间 |
TIME | 进程占用CPU的总时间 |
COMMAND | 进程文件,进程名 |
进程排序
ps aux --sort %cpu #按进程CPU占有率降序进行排序
ps aux --sort -%cpu #按进程CPU占有率升序进行排序
ps aux --sort %cpu | head -3
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 23:34 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 23:34 0:00 [rcu_gp]
ps aux --sort -%cpu | head -3
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2288 1.3 15.5 3515412 279560 ? Ssl 23:36 0:07 /usr/bin/gnome-shell
root 2454 0.3 0.5 240724 10080 ? Ss 23:36 0:01 /usr/libexec/sssd/sssd_kcm --uid 0 --gid 0 --logger=files
查看进程父子关系
ps -ef
从PPID:0生成PID:2
从PPID:2生成PID:3
…
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 2 0 0 22:01 ? 00:00:00 [kthreadd]
root 3 2 0 22:01 ? 00:00:00 [rcu_gp]
root 4 2 0 22:01 ? 00:00:00 [rcu_par_gp]
自定义显示字段
语法:ps axo 需要显示字段
ps axo user,pid,ppid,%mem,command |head -3
USER PID PPID %MEM COMMAND
root 1 0 0.3 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31
root 2 0 0.0 [kthreadd]
动态查看进程top
top #正常查看
top -d 1 #每秒刷新一次top
top -d 1 -p 10126 #每秒刷新一次查看指定程序
us — 用户空间占用CPU的百分比。
sy — 内核空间占用CPU的百分比。
ni — 改变过优先级的进程占用CPU的百分比
id — 空闲CPU百分比
wa — IO等待占用CPU的百分比
hi — 硬中断(Hardware IRQ)占用CPU的百分比
si — 软中断(Software Interrupts)占用CPU的百分比
使用信号控制进程kill
给进程发送信号(kill -l列出所有支持的信号)
[root@localhost ~]# kill -9
编号 信号名
1 SIGHUP 重新加载配置
2 SIGINT 键盘中断Ctrl+C
3 SIGQUIT 键盘退出Ctrl+\,类似SIGINT
9 SIGKILL 强制终止,无条件
15 SIGTERM 终止(正常结束),缺省信号
18 SIGCONT 继续
19 SIGSTOP 暂停
20 SIGTSTP 键盘暂停Ctrl+Z
作业控制jobs
作业控制是一个命令行功能,也叫后台运行。
foreground->fg->前台进程:是在终端中运行的命令,占领终端。
background->bg->后台进程:没有控制终端,它不需要终端的交互。看不见,但是在运行。
[root@localhost ~]# sleep 3000 & #运行后台程序
[root@localhost ~]# ps aux | grep sleep #ps查询所有程序。
root 8895 0.0 0.0 100900 556 pts/0 S 12:13 0:00 sleep 3000
[root@localhost ~]# jobs #jobs查看后台进程。
[1]+ Running sleep 3000 &
[root@localhost ~]# fg 1 #将作业1调回到前台
[root@localhost ~]# kill %1 #消灭后台进程
总结:
& 后台运行程序
jobs 查询后台
kill %1 停止后台进程