这是我参与 8 月更文挑战的第 7 天,活动详情查看: 8月更文挑战shell
一名致力于在技术道路上的终身学习者、实践者、分享者,一位忙起来又偶尔偷懒的原创博主,一个偶尔无聊又偶尔幽默的少年。数据库
欢迎各位掘友们微信搜索「杰哥的IT之旅」关注!vim
原文连接:Linux环境下进程和计划任务管理api
程序时保存在外部存储介质(如硬盘)中的可执行机器代码和数据的静态集合,而进程实在CPU及内存中处于动态执行状态的计算机程序。在Linux系统中,每一个程序启动后能够建立一个或多个进程。缓存
ps命令是Linux系统中最为经常使用的进程查看工具,主要用于显示包含当前运行的各进行完整信息的静态快照。经过不一样的命令选项,能够选择性的查看进程信息。bash
执行“ps aux”命令后,将以简单列表的形式显示出进程信息。微信
下述输出信息中,第1行为列表标题,其中各字段的含义描述以下:markdown
[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号)。app
[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
复制代码
top命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用状况,默认状况下每三秒刷新一次。
上述输出信息中,开头的部分显示了系统任务Tasks、CPU占用、内存占用Mem、交换空间Swap等信息,下方将依次显示当前进程的排名状况。
在top命令的全屏操做界面中,能够按P键根据CPU占用状况对进程列表进行排序,或按M键根据内存占用状况进行排序,按N键根据启动时间进行排序,按h键能够得到top程序的在线帮助信息,按q键能够正常退出top程序。
pgrep命令正是用来查询特定进程信息的专用工具。使用pgrep命令能够根据进程的名称、运行该进程的用户、进程所在的终端等多种属性查询特定进程的PID号。
经过pgrep命令,能够只指定进程的一部分名称进行查询,结合“-l”选项可同时输出对应的进程名、“-U”选项查询特定用户的进程、“-t”选项查询在特定终端运行的进程。
[root@localhost ~]# pgrep -l "log"
1180 rsyslogd
复制代码
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
复制代码
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
复制代码
在当天的15:10时自动关闭当前系统。
[root@localhost ~]# at 15:10
at> cat /proc/cpuinfo
at> <EOT>
job 3 at 2016-06-17 15:10
复制代码
对于已经设置但还未执行的计划任务,能够经过atq命令进行查询。
[root@localhost ~]# atq
3 2016-06-17 15:10 a root
复制代码
若要删除指定编号的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
复制代码
使用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
复制代码
/var/spool/cron——用户cron任务的配置文件存放目录
由用户自行设置的cron计划任务将被保存到目录/var/spool/cron/中,文件名与用户名相同。
[root@localhost ~]# ls -l /var/spool/cron/
总用量 0
复制代码
crond守护进程会自动检查/etc/crontab文件、/etc/cron.d/目录及/var/spool/cron目录中的改变,若是发现有配置更改,就会被载入内存,因此当某个crontab文件改变后并不须要从新启动crond守护进程就可使设置生效。
使用crontab命令管理用户的计划任务
设置用户的周期性计划任务列表主要经过crontab命令进行,结合不一样的选项能够完成不一样的计划任务管理操做。
当使用“*”时表示取值范围中的任意时间。crontab任务配置记录中所设置的命令操做将在“分钟”+“小时”+“日期”+“月份”+“星期”都知足的条件下执行。
除了“*”之外,还能够用减号“-”、逗号“,”、斜杠“/”与数字构成表达式来表示较复杂的时间关系。
“-”:表示一个连续的时间范围
“,”:表示一个间隔的不连续范围
“/”:表示指定间隔频率,例如*/5表示每隔五天。
“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
复制代码
“crontab -r”命令:能够删除用户的计划任务列表。
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
复制代码
Linux环境下安装及管理程序(软件包封装、RPM命令、源代码编译安装的基本过程)
本文完。
原创不易,若是你以为这篇文章对你有点用的话,麻烦你为本文点个赞、评论或转发一下,由于这将是我输出更多优质文章的动力,感谢!
对了,掘友们记得给我点个免费的关注哟!防止你迷路下次就找不到我了。
咱们下期再见!