Linux环境下进程和计划任务管理

程序时保存在外部存储介质(如硬盘)中的可执行机器代码和数据的静态集合,而进程实在CPU及内存中处于动态执行状态的计算机程序。在Linux系统中,每个程序启动后可以创建一个或多个进程。

1

ps命令——查看静态的进程统计信息

ps命令是Linux系统中最为常用的进程查看工具,主要用于显示包含当前运行的各进行完整信息的静态快照。通过不同的命令选项,可以选择性的查看进程信息。

  • a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息。

  • u:使用以用户为主的格式输出进程信息。

  • x:显示当前用户在所有终端下的进程信息。

  • -e:显示系统内的所有进程信息。

  • -l:使用长格式显示进程信息。

  • -f:使用完整的格式显示进程信息。

执行“ps aux”命令后,将以简单列表的形式显示出进程信息。

下述输出信息中,第1行为列表标题,其中各字段的含义描述如下:

USER:启动该进程的用户账号的名称。

PID:该进程在系统中的数字ID号,在当前系统中是唯一的。

%CPU:CPU占用的百分比。

%MEM:内存占用的百分比。

VSZ:占用虚拟内存swap空间的大小。

RSS:占用常驻内存物理内存的大小。

TTY:表明该进程在哪个终端上运行。“?”表示未知或不需要终端。

STAT:显示了进程当前的状态,S:休眠、R:运行、Z:僵死、<:高优先级、N:低优先级、s:父进程、+:前台进程。

START:启动该进程的时间。

TIME:该进程占用的CPU时间。

COMMAND:启动该进程的命令的名称。

[root@localhost ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.1  0.1  19364  1540 ?        Ss   12:19   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    12:19   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    12:19   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        S    12:19   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S    12:19   0:00 [migration/0]
root         6  0.0  0.0      0     0 ?        S    12:19   0:00 [watchdog/0]
root         7  0.0  0.0      0     0 ?        S    12:19   0:00 [migration/1]
root         8  0.0  0.0      0     0 ?        S    12:19   0:00 [migration/1]
root         9  0.0  0.0      0     0 ?        S    12:19   0:00 [ksoftirqd/1]
root        10  0.0  0.0      0     0 ?        S    12:19   0:00 [watchdog/1]
root        11  0.0  0.0      0     0 ?        S    12:19   0:00 [events/0]
root        12  0.0  0.0      0     0 ?        S    12:19   0:00 [events/1]
root        13  0.0  0.0      0     0 ?        S    12:19   0:00 [cgroup]
root        14  0.0  0.0      0     0 ?        S    12:19   0:00 [khelper]
root        15  0.0  0.0      0     0 ?        S    12:19   0:00 [netns]
root        16  0.0  0.0      0     0 ?        S    12:19   0:00 [async/mgr]
root        17  0.0  0.0      0     0 ?        S    12:19   0:00 [pm]
root        18  0.0  0.0      0     0 ?        S    12:19   0:00 [sync_supers]
root        19  0.0  0.0      0     0 ?        S    12:19   0:00 [bdi-default]
root        20  0.0  0.0      0     0 ?        S    12:19   0:00 [kintegrityd/0]
root        21  0.0  0.0      0     0 ?        S    12:19   0:00 [kintegrityd/1]

若执行“ps -elf”命令,则将以长格式显示系统中的进程信息,并且显示内容较多。输出信息中还包括PPID列(表示对应进程的父进程的PID号)。

[root@localhost ~]# ps -elf
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  80   0 -  4841 poll_s 12:19 ?        00:00:01 /sbin/init
1 S root         2     0  0  80   0 -     0 kthrea 12:19 ?        00:00:00 [kthreadd]
1 S root         3     2  0 -40   - -     0 migrat 12:19 ?        00:00:00 [migration/0]
1 S root         4     2  0  80   0 -     0 ksofti 12:19 ?        00:00:00 [ksoftirqd/0]
1 S root         5     2  0 -40   - -     0 cpu_st 12:19 ?        00:00:00 [migration/0]
5 S root         6     2  0 -40   - -     0 watchd 12:19 ?        00:00:00 [watchdog/0]
1 S root         7     2  0 -40   - -     0 migrat 12:19 ?        00:00:00 [migration/1]
1 S root         8     2  0 -40   - -     0 cpu_st 12:19 ?        00:00:00 [migration/1]
1 S root         9     2  0  80   0 -     0 ksofti 12:19 ?        00:00:00 [ksoftirqd/1]
5 S root        10     2  0 -40   - -     0 watchd 12:19 ?        00:00:00 [watchdog/1]

直接执行不带任何选项的ps命令时,将只显示当前用户会话中打开的进程。

[root@localhost ~]# ps
 PID TTY          TIME CMD
2258 pts/1    00:00:00 bash
2280 pts/1    00:00:00 bash
2369 pts/1    00:00:00 ps

由于系统中运行的进程数量较多。需要查询某一个进程的信息时可以结合管道操作和grep命令进行过滤。

[root@localhost ~]# ps aux | grep bash
root      2239  0.0  0.1 108336  1772 pts/0    Ss+  12:22   0:00 /bin/bash
root      2258  0.0  0.1 108336  1812 pts/1    Ss   12:23   0:00 -bash
root      2280  0.0  0.1 108336  1764 pts/1    S    12:23   0:00 bash
root      2753  0.0  0.0 103256   848 pts/1    S+   13:41   0:00 grep bash

2

top命令——查看进程动态信息

top命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每三秒刷新一次。

上述输出信息中,开头的部分显示了系统任务Tasks、CPU占用、内存占用Mem、交换空间Swap等信息,下方将依次显示当前进程的排名情况。

  • 系统任务Tasks信息:total:总进程数;running:正在运行的进程数;sleeping:休眠的进程数;stopped:中止的进程数;zomibe:僵死无响应的进程数。

  • CPU占用信息:us:用户占用;sy:内核占用;ni:优先级调度占用;id:空闲CPU;wa:I/O等待占用;hi:硬件中断占用;si:软件中断占用;st:虚拟化占用。Rt:实时变化。

  • 内存占用Mem信息:total,总内存空间;used,已用内存;free,空闲内存;buffers,缓冲区域。

  • 交换空间swap占用:total,总交换空间;used,已用交换空间;free,空闲交换空间;cached,缓存空间。

在top命令的全屏操作界面中,可以按P键根据CPU占用情况对进程列表进行排序,或按M键根据内存占用情况进行排序,按N键根据启动时间进行排序,按h键可以获得top程序的在线帮助信息,按q键可以正常退出top程序。

3

pgrep命令——查询进程信息

pgrep命令正是用来查询特定进程信息的专用工具。使用pgrep命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性查询特定进程的PID号。

通过pgrep命令,可以只指定进程的一部分名称进行查询,结合“-l”选项可同时输出对应的进程名、“-U”选项查询特定用户的进程、“-t”选项查询在特定终端运行的进程。

[root@localhost ~]# pgrep -l "log"
1180 rsyslogd

4

pstree命令——查询进程树

pstree命令可以输出Linux系统中各进程的树形结构,判断出各进程之间的相互关系(父、子进程)。pstree命令默认情况下只显示各进程的名称,“-p”选项使用时可以同时列出对应的PID号、“-u”选项可以列出对应的用户名、“-a”选项可以列出完整的命令信息。

执行“pstree -aup”命令可以查看当前系统的进程树,包括各进程对应的PID号、用户名、完整命令等信息。

[root@localhost ~]# pstree -aup
init,1
 ├─NetworkManager,1249 --pid-file=/var/run/NetworkManager/NetworkManager.pid
 │   ├─dhclient,2909 -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth1.pid -lf...
 │   └─{NetworkManager},1300
 ├─abrtd,1570
 ├─acpid,1328
 ├─atd,1589
 ├─auditd,1155
 │   └─{auditd},1156
 ├─automount,1411 --pid-file /var/run/autofs.pid
 │   ├─{automount},1412
 │   ├─{automount},1413
 │   ├─{automount},1417
 │   └─{automount},1420
 ├─bonobo-activati,1945 --ac-activate --ior-output-fd=18
 │   └─{bonobo-activat},1946
 ├─certmonger,1601 -S -p /var/run/certmonger.pid
 ├─clock-applet,2192 --oaf-activate-iid=OAFIID:GNOME_ClockApplet_Factory --oaf-ior-fd=34
 ├─console-kit-dae,1672 --no-daemon
 │   ├─{console-kit-da},1673
 │   ├─{console-kit-da},1674
 │   ├─{console-kit-da},1675
 │   ├─{console-kit-da},1676

5

at一次性任务设置

at命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务atd必须已经运行。需要注意的是,计划执行任务的时间、日期必须安排在当前系统的时刻之后,否则将无法正确设置计划任务。

设置一次性计划任务时,在at命令行中依次指定计划执行任务的时间、日期作为参数(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间),确认后将进入带“at>”提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按Ctrl+D组合键提交任务即可。所设置的命令操作将在计划的时间点被依次执行。

[root@localhost ~]# date
2016年 06月 17日 星期五 15:01:40 CST
[root@localhost ~]# at 15:05 2016-06-17
at> cat /proc/cpuinfo > /tmp/ps.root
at> <EOT>
job 2 at 2016-06-17 15:05
[root@localhost ~]# cat /tmp/ps.root 
processor  : 0
vendor_id  : GenuineIntel
cpu family  : 6
model    : 61
model name  : Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
stepping  : 4
cpu MHz    : 2194.915
cache size  : 3072 KB
fpu    : yes
fpu_exception  : yes
cpuid level  : 20
wp    : yes
flags    : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon xtopology tsc_reliable nonstop_tsc unfair_spinlock pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm 3dnowprefetch arat fsgsbase smep
bogomips  : 4389.83
clflush size  : 64
cache_alignment  : 64
address sizes  : 40 bits physical, 48 bits virtual
power management:

processor  : 1
vendor_id  : GenuineIntel
cpu family  : 6
model    : 61
model name  : Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
stepping  : 4
cpu MHz    : 2194.915
cache size  : 3072 KB
fpu    : yes
fpu_exception  : yes
cpuid level  : 20
wp    : yes
flags    : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon xtopology tsc_reliable nonstop_tsc unfair_spinlock pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm 3dnowprefetch arat fsgsbase smep
bogomips  : 4389.83
clflush size  : 64
cache_alignment  : 64
address sizes  : 40 bits physical, 48 bits virtual
power management:

You have mail in /var/spool/mail/root
[root@localhost ~]#

在当天的15:10时自动关闭当前系统。

[root@localhost ~]# at 15:10
at> cat /proc/cpuinfo
at> <EOT>
job 3 at 2016-06-17 15:10
[root@localhost ~]#

对于已经设置但还未执行的计划任务,可以通过atq命令进行查询。

[root@localhost ~]# atq
3  2016-06-17 15:10 a root
[root@localhost ~]#

若要删除指定编号的at任务,可以执行atrm命令。删除后的at任务将不会被执行,并且不会显示在atq命令的显示结果中。但已经执行过的任务无法删除。

[root@localhost ~]# at 15:16
at> cat /proc/cpuinfo
at> <EOT>
job 4 at 2016-06-17 15:16
[root@localhost ~]# atrm 4
[root@localhost ~]# atq
[root@localhost ~]#

6

crontab周期性任务设置

使用crontab命令设置的计划任务可以按预设的周期重复执行,可以大大减轻设置重复性系统管理任务的操作。启用周期性任务也有一个的前提条件,即对应的系统服务crond必须已经运行。

crontab的配置文件和目录

crond通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置。

/etc/crontab文件中设置的是维护Linux系统所需的任务,由Linux系统及相关程序在安装时自动设置,不建议用户手动修改此文件。该文件包括了设置shell环境、可执行路径等变量的操作,以及每小时、每天、每周、每月需要执行的任务目录。

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash                  设置执行计划任务的shell环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin     定义可执行命令及程序的路径
MAILTO=root                     将任务输出信息发送到指定用户的邮箱
HOME=/                        执行计划任务时使用的主目录

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)分钟
# |  .------------- hour (0 - 23)小时
# |  |  .---------- day of month (1 - 31)天
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...月
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat周
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

[root@localhost ~]#

/var/spool/cron——用户cron任务的配置文件存放目录

由用户自行设置的cron计划任务将被保存到目录/var/spool/cron/中,文件名与用户名相同。

[root@localhost ~]# ls -l /var/spool/cron/
总用量 0
[root@localhost ~]#

crond守护进程会自动检查/etc/crontab文件、/etc/cron.d/目录及/var/spool/cron目录中的改变,如果发现有配置更改,就会被载入内存,所以当某个crontab文件改变后并不需要重新启动crond守护进程就可以使设置生效。

使用crontab命令管理用户的计划任务

设置用户的周期性计划任务列表主要通过crontab命令进行,结合不同的选项可以完成不同的计划任务管理操作。

-e:编辑计划任务列表。

-u:指定所管理的计划任务属于哪个用户,默认时针对当前用户,一般只有root用户有权限使用此选项用户编辑、删除其他用户的计划任务。

-l:列表显示计划任务。

-r:删除计划任务列表。

当使用“*”时表示取值范围中的任意时间。crontab任务配置记录中所设置的命令操作将在“分钟”+“小时”+“日期”+“月份”+“星期”都满足的条件下执行。

crontab计划任务的配置格式
分钟 小时 日期 月份 星期 执行的命令
01 * * * * service httpd start
02 4 * * * service httpd stop

除了“*”以外,还可以用减号“-”、逗号“,”、斜杠“/”与数字构成表达式来表示较复杂的时间关系。

“-”:表示一个连续的时间范围

“,”:表示一个间隔的不连续范围

“/”:表示指定间隔频率,例如*/5表示每隔五天。

crontab计划任务的配置字段说明
项目 说明
分钟 取值从0~59的任意整数
小时 取值从0~23的任意整数
日期 取值从1~31的任意整数(日期在该月份中必须有效)
月份 取值从1~12的任意整数
星期 取值从0~7的任意整数,0或7代表星期日
命令 可以是普通的命令,也可以是编写的脚本

“crontab -e”命令:可以设置自己的计划任务。

[root@localhost ~]# crontab -e
01 * * * * /sbin/service httpd start
02 * * * * /sbin/service httpd stop

“crontab -l”命令:可以查看当前用户的计划任务列表。(-u:可以查看其它用户的计划任务)

[root@localhost ~]# crontab -l
01 * * * * /sbin/service httpd start 
02 * * * * /sbin/service httpd stop 
[root@localhost ~]#

“crontab -r”命令:可以删除用户的计划任务列表。

[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
[root@localhost ~]#

猜你喜欢

转载自blog.csdn.net/wang13342322203/article/details/84230622