-
Notifications
You must be signed in to change notification settings - Fork 14
/
LinuxNoteProcess.md
144 lines (127 loc) · 6.21 KB
/
LinuxNoteProcess.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# Linux笔记 Chapter 5
[PREV 4.x 用户管理](LinuxNoteUser.md) | [NEXT 6.x 系统文件构成](LinuxNoteSystem.md)
## 5.1 程序和进程的概念
- 程序是静态概念,本身作为一种软件资源长期保持
- 进程是程序执行的过程,它是动态的,是有一定的生命周期的,是动态产生和消亡的
- 一个程序可以有多个进程共用,一个进程在活动中有可顺序地执行若干个程序,它们没有任何对应关系
在Linux系统中,分为前台进程和后台进程
- 前台进程:当一个命令执行的过程中,不允许其它的命令执行,只能等待该命令执行完毕后(也就是该进程结束后)才能执行其它命令。比如查找一个文件:`find / -name init`在这个命令执行中是不可以进行其它命令执行的。
- 后台进程:允许多个进程一起同步执行:只需要在最后加上“&”即表示为后台进程(注意后台进程不能是交互执行的,比如ping命令等)。`find / -name init > /home/init.sh &`
## 5.2.1 进程管理命令
w(who):查看用户信息
```
13:50:31 up 49 min, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 :0 05:02 8:49m 13.24s 13.24s /usr/bin/Xorg :0 -br -ve
root pts/1 192.168.100.162 05:04 0.00s 0.54s 0.02s w
```
- TTY:表示以什么方式登录这台计算机(pts/0远程登录)
- FROM:表示从什么位置登录的
- LOGIN@:表示登录时间
- IDLE:表示用户闲置的时间
- JCPU:表示当前这个用户执行的所有进程所耗时的总和
- PCPU:表示执行程序耗费的时间
- load avegage:表示系统的负载值,分别显示过去的1、5、15分钟系统的负载程度
- 如果想知道系统的平均负载,三者之和除3即可
- 最终结果如果在0.8以下,表示系统正常
- 如果达到几十或上百,那么系统负载非常高,可能无法响应任何命令
- WHAT:表示当前执行的什么任务
## 5.2.2 进程查看命令
ps(process status)
- `-a`:显示所有用户的进程
- `-l`:长格式显示
```
ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 3230 3226 0 80 0 - 27089 do_wai pts/1 00:00:00 bash
4 R 0 3861 3230 10 80 0 - 27036 - pts/1 00:00:00 ps
```
- STAT:当前状态s休眠D不可中断的休眠状态R运行状态Z僵死状态T停止
- UID:表示当前启动进程的用户
- PID:进程号
- PPID:父进程号
- TTY:进程启动的终端
- NI:进程的优先级
- TIME:进程启动以来占用的实际时间
- CMD:进程的命令
- 其它选项
- `-u`:显示用户名和启动时间
- `-x`:显示没有控制终端的进程
- `-e`:显示所有进程,包括没有控制终端的进程
- `-w`:宽行显示,可以使用多个w进行加宽显示
进程查看命令
- `ps -el`:查看所有的进程,包括没有终端的进程
- `ps -aux`:显示当前进程占用CPU(%CPU)和内存的百分比(%MEM)
- `ps -el --sort pid`:进行对进程PID排序,也可使用其它字段排序
- `ps -aux | grep rpc`:对进程结果进行过滤
## 5.2.3 杀死进程
- 该进程占用了过多的CPU时间
- 该进程锁住了一个终端,使用其它前台进程无法运行
- 运行时间过长,没有预期的效果
- 成为了系统负载的主要负担
- 无法正常退出...
命令:
- `kill [进程号]`:关闭进程,`kill 1234`
- `kill -9 [进程号]`:强制关闭进程,`kill -9 1234`
- `kill -1 [进程号]`:重启进程,`kill -1 1234`
- `xkill`:关闭图形程序
- `killall`:结束所有进程
- `pgrep [服务名称]`:查找服务进程号
- `pkill [进程名称]`:关闭进程,`pkill redis`
## 5.2.4 进程常用命令
- `nohup program &`:使进程在用户退出登录后仍旧继续执行
- ctrl+c:终止一个程序的运行
- ctrl+z:挂起一个程序的运行
- `jobs`:放在后台执行的进程可以使用进行查看
- 把任务恢复到前台继续执行`fg [任务编号]`
- 把任务恢复到后台继续执行`bg [任务编号]`
- `top`:进程状态显示和进程控制,每5秒钟自动刷新次(动态显示)
- d:指定刷新的时间间隔
- c:显示整个命令行的详细信息
- u:可以查看指定用户的进程
- k:终止正在执行的进程
## 5.3.1 任务计划
任务计划的命令
- at:安排作业在某一时刻执行一次
- cron:安排周期性运行的作业
## 5.3.2 一次性任务计划
- `at [-f 文件名] 时间`:安排一个或多个命令在指定的时间运行一次(ctrl+d保存任务退出)
- 绝对计时方法:`HH:MM YYYY-MM-DD`
- 相对计时方法:`now + n minutes`,`now + n hours`,`now + n days`
```
at now+2 minutes
at> /usr/bin/wall < /home/at-test.sh
```
- `at -d` or `atrm`:删除队列中的任务
- `at -l` or `atq`:查看队列中的任务
- 如果`/etc/at.allow`存在,则在里面的用户可以使用at执行计划
- 如果`/etc/at.deny`存在,则在里面的用户都不可以使用at执行计划
- 如果文件都不存在,则只有root可以使用at执行计划
```
find /etc/ -name at.allow
find /etc/ -name at.deny
```
## 5.3.3 周期性任务计划
`crontab {-l|-r|-e}`:用于生成cron进程所需要的crontab文件
- `-l`:显示当前的crontab
- `-r`:删除当前的crontab
- `-e`:使用编辑器编辑当前的crontab
计划命令的时间格式:
分钟 | 小时 | 天 | 月 | 星期 | 命令/脚本
---|---|---|---|---|---
0 | 4 | * | * | * |
0 | 18 | * | * | 2,5 |
0 | 18 | * | 1-3 | 2,5 |
注意:
- 时间选项都不能为空,不知道的值统一用*,表示任何时间
- 每个时间字段都可以指定多个值,不连续的值用“,”分隔,连续的值用“-”分隔
- 命令应该使用绝对路径,用户必须有运行对应命令的权限
如果crontab程序没有启动,则需要手工启动:
- `ps -el | grep crond`
- `/etc/rc.d/init.d/crond start`
- crontab文件建好后,可以到`/var/spool/cron`目录确认
```
crontab -e
*/1 * * 1-12 * /usr/bin/wall < /home/at-test.sh
```
[PREV 4.x 用户管理](LinuxNoteUser.md) | [NEXT 6.x 系统文件构成](LinuxNoteSystem.md)