Linux如何管理进程

一、程序

是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具
用于描述进程要完成的功能,是控制进程执行的指令集

二、进程

1.什么是进程

运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位
进程ID(Process ID,PID)号码被用来标记各个进程
UID、GID、和SELinux语境决定对文件系统的存取和访问权限
通常从执行进程的用户来继承
存在生命周期
都由其父进程创建

2.进程特性

动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
并发性:任何进程都可以同其他进程一起并发执行;
独立性:进程是系统进行资源分配和调度的一个独立单位;
结构性:进程由程序、数据和进程控制块三部分组成。
僵尸’进程: 一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵厂进程。
父进程退出 子进程没有退出 那么这些子进程就没有父进程来管理了, 就变成僵尸进程
子进程已经结束了,父进程没有意识到,

三、线程

在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单
位。任务调度采用的是时间片轮转的抢占式调度方式,而进程是任务调度的最小单位,每个进程有各自独立的
一块内存,使得各个进程之间内存地址相互隔离。
后来,随着计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大,已经无法满足越来越复杂的程
序的要求了。于是就发明了线程。
线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一
个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的
线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。而进程由内存空间(代码、数据、进程空间、打开的
文件)和一个或多个线程组成。

区别
线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进
程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
调度和切换:线程上下文切换比进程上下文切换要快得多

四、进程管理相关命令

2.ps

ps aux

 

 

 ps -elf

 

表头含义
F进程标志,说明进程的权限,常见的标志有两个:1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限;
S进程状态。具体的状态和“psaux”命令中的STAT状态一致;
UID运行此进程的用户的ID;
PID

进程的ID;

PPID父进程的ID;
C该进程的CPU使用率,单位是百分比;
PRI进程的优先级,数值越小,该进程的优先级越高,越早被CPU执行;系统定义不可以人为修改
NI进程的优先级,数值越小,该进程越早被执行;可以人为修改
ADDR该进程在内存的哪个位置
SZ该进程占用多大内存;
WCHAN该进程是否运行。“-”代表正在运行;
TTY该进程由哪个终端产生;
TIME该进程占用CPU的运算时间,注意不是系统时间;
CMD产生此进程的命令名;

ps 即 process state,可以进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/数字 目录下的各文件中

查看静态的进程统计信息

支持三种选项:

  • UNIX选项 如: -A -e
  • GNU选项 如: --help
  • BSD选项 如: a
  • “ps aux” 可以查看系统中所有的进程;
  • “ps -le” 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
  • “ps -l” 只能看到当前 Shell 产生的进程;

常用选项

  • a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。
  • u:使用以用户为主的格式输出进程信息。
  • x:显示当前用户在所有终端下的进程信息。
  • -e:显示系统内的所有进程信息。
  • -l:使用长(Long)格式显示进程信息。
  • -f:使用完整的(Full)格式显示进程信
  • k|–sort 属性 对属性排序,属性前加 - 表示倒序![在这里插入图片描述]

进程状态:

R 运行状态 S 休眠状态,可被唤醒 D 不可中断的休眠状态 T 停止、挂起状态
Z 僵死状态(子进程比父进程先结束,而父进程又没有回收子进程的机制)

动态查看进程

2.top
 

 

ps 命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,并且,如果管理员需要实时监控进程运行情况,就必须不停地执行 ps 命令,这显然是缺乏效率的。

为此,Linux 提供了 top 命令。top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。

选项:

  • -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
  • -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
  • -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
  • -p 进程PID:仅查看指定 ID 的进程;
  • -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;
  • -u 用户名:只监听某个用户的进程;

在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:

  • ? 或 h:显示交互模式的帮助;
  • c:按照 CPU 的使用率排序,默认就是此选项;
  • M:按照内存的使用率排序;
  • N:按照 PID 排序;
  • T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
  • k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
  • r:按照 PID 给某个进程重设优先级(Nice)值;
  • q:退出 top 命令;

top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。命令的输出主要分为两部分:

  • 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;
  • 第二部分从第六行开始,显示的是系统中进程的信息;
  • 查看cpu平均负载(load average)的一种方法 w uptime
  • load average 1min 5min 15min 单位时间内系统处理的任务平均数(根据cpu的数量判定)
  • 数值超过CPU数量的7-8成时就应该警惕了

2.1第一部分

top - 10:06:37 up 5:36, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 204 total, 1 running, 202 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867048 total, 74348 free, 755112 used, 1037588 buff/cache
KiB Swap: 4194300 total, 4191856 free, 2444 used. 878688 avail Mem

第一行为任务队列信息,具体内容如表 所示。

内容说明
12:26:46系统当前时间
up 1 day 13:32系统的运行时间,本机已经运行1天13小时32分钟
2users当前登录了两个用户
load average:0.00.0.00.0.00系统在之前1分钟、5分钟、15分钟的平均负载。如果CPU是单核的,则这个数值超过1就是高负载:如果CPU是四核的,则这个数值超过4就是高负载(这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器CPU的核数)


第二行为进程信息,具体内容如表
 

内容说明
Tasks:95total系统中的进程总数
1 running正在运行的进程数
94 sleeping睡眠的进程数
0 sopped正在停止的进程数
0 zombie僵尸进程数。如果不是0,则需要手工检查僵尸进程

第三行为 CPU 信息,具体内容如表
 

内容说明
Cpu(s):0.1%us用户模式占用的CPU百分比
0.1%sy系统模式占用的CPU百分比
0.0%ni改变过优先级的用户进程占用的CPU百分比
99.7%id空闲CPU占用的CPU百分比
0.1%wa等待输入/输出的进程占用的CPU百分比
0.0%hi硬中断请求服务占用的CPU百分比
0.1%si软中断请求服务占用的CPU百分比
0.0%stst(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比

第四行为物理内存信息,具体内容如表buff cache
 

内容说明
Mem:625344ktotal物理内存的总量,单位为KB
571504k used已经使用的物理内存数量
53840k&ee空闲的物理内存数量。我们使用的是虚拟机,共分配了628MB内存,所以只有53MB的空闲内存
65800k buffers作为缓冲的内存数量

第五行为交换分区(swap)信息,如表
 

内容说明
Swap:524280k total交换分区(虚拟内存)的总大小
Ok used已经使用的交换分的大小
524280k free空闲交换分区的大小
409280k cached作为缓存的交换分区的大小

通过 top 命令的第一部分就可以判断服务器的健康状态。如果 1 分钟、5 分钟、15 分钟的平均负载高于 1,则证明系统压力较大。如果 CPU 的使用率过高或空闲率过低,则证明系统压力较大。如果物理内存的空闲内存过小,则也证明系统压力较大。

这时,我们就应该判断是什么进程占用了系统资源。如果是不必要的进程,就应该结束这些进程;如果是必需进程,那么我们该増加服务器资源(比如増加虚拟机内存),或者建立集群服务器。

缓冲(buffer)和缓存(cache)的区别:

  • 缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
  • 缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。

简单来说,缓存(cache)是用来加速数据从硬盘中"读取"的,而缓冲(buffer)是用来加速数据"写入"硬盘的。

2.2第二部分

top 命令的第二部分输出,主要是系统进程信息,各个字段的含义如下:

  • PID:进程的 ID。
  • USER:该进程所属的用户。
  • PR:优先级,数值越小优先级越高。
  • NI:优先级,数值越小、优先级越高。
  • VIRT:该进程使用的虚拟内存的大小,单位为 KB。
  • RES:该进程使用的物理内存的大小,单位为 KB。
  • SHR:共享内存大小,单位为 KB。
  • S:进程状态。
  • %CPU:该进程占用 CPU 的百分比。
  • %MEM:该进程占用内存的百分比。
  • TIME+:该进程共占用的 CPU 时间。
  • COMMAND:进程的命令名。

 

4C8G
2P4C16G

查看cpu负载 top w uptime
cpu使用率 top ps aux ps -ef
内存 top free -m
磁盘空间 df
网卡流量 ifconfig
已安装软件数 rpm -qa |wc -l
IO使用率 iostat vmstat iotop
atop
用户登录数 who | wc -l
进程数 ps aux | wc -l

查看线程
ps -aT
top -H
top -H -p pid号

3.Pgrep命令

pgrep、pstree
-U 用户
-l : 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示指定进程的子进程

 

 

4.pstree命令

 

以树形结构列出进程信息
pstree [OPTION] [ PID | USER ]

常用选项
-a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p 显示PID
-T 不显示线程thread,默认显示线程
-u 显示用户切换
-H pid 高亮显示指定进程及其前辈进程

[root@test ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─VGAuthService
├─abrt-dbus───2*[{abrt-dbus}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon───{dbus-daemon}]
├─dbus-launch
├─dnsmasq───dnsmasq
├─gdm─┬─X───3*[{X}]
│ ├─gdm-session-wor─┬─gnome-session-b─┬─gnome-settings-───4*[{gnome-settings-}]
│ │ │ ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───+
│ │ │ │ │ ├─ibus-engine-s+
│ │ │ │ │ └─2*[{ibus-daem+
│ │ │ │ └─10*[{gnome-shell}]
│ │ │ └─3*[{gnome-session-b}]
│ │ └─2*[{gdm-session-wor}]
│ └─3*[{gdm}]
├─gssproxy───5*[{gssproxy}]
├─ibus-x11───2*[{ibus-x11}]
├─irqbalance
├─ksmtuned───sleep
├─libvirtd───15*[{libvirtd}]
├─lsmd
├─lvmetad
├─packagekitd───2*[{packagekitd}]
├─polkitd───5*[{polkitd}]
├─pulseaudio───2*[{pulseaudio}]
├─rngd
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─sshd─┬─sshd───bash───su───bash───su───bash
│ └─sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
├─wpa_supplicant
└─xdg-permission-───2*[{xdg-permission-}]
[root@test ~]# pstree -aup
systemd,1 --switched-root --system --deserialize 21
├─ModemManager,853
│ ├─{ModemManager},861
│ └─{ModemManager},872
├─NetworkManager,956 --no-daemon
│ ├─dhclient,1079 -d -q -sf /usr/libexec/nm-dhcp-helper -pf …
│ ├─{NetworkManager},968
│ └─{NetworkManager},972
├─VGAuthService,852 -s
├─abrt-dbus,2875 -t133
│ ├─{abrt-dbus},2876
│ └─{abrt-dbus},2878
├─abrt-watch-log,885 -F Backtrace /var/log/Xorg.0.log – /usr/bin/abrt-dump-xorg -xD
├─abrt-watch-log,886 -F BUG: WARNING: at WARNING: CPU:INFO: possible recursive locking det
├─abrtd,884 -d -s
├─accounts-daemon,882
│ ├─{accounts-daemon},895
│ └─{accounts-daemon},907
├─alsactl,881 -s -n 19 -c -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf–initfile=/lib/alsa/
├─at-spi-bus-laun,1530,gdm
│ ├─dbus-daemon,1535 --config-file=/usr/share/defaults/at-spi2/accessibility.conf …
│ │ └─{dbus-daemon},1536
│ ├─{at-spi-bus-laun},1531
│ ├─{at-spi-bus-laun},1532
│ └─{at-spi-bus-laun},1534
├─at-spi2-registr,1538,gdm --use-gnome-session
│ ├─{at-spi2-registr},1540
│ └─{at-spi2-registr},1541
├─atd,1348 -f
├─auditd,823
│ ├─audispd,825
│ │ ├─sedispatch,827
│ │ └─{audispd},828
│ └─{auditd},824
├─avahi-daemon,848,avahi
│ └─avahi-daemon,858
├─chronyd,906,chrony
├─colord,1631,colord
│ ├─{colord},1636
│ └─{colord},1641
├─crond,1345 -n
├─cupsd,1337 -f
├─dbus-daemon,1524,gdm --fork --print-pid 4 --print-address 6 --session
│ └─{dbus-daemon},1525
├─dbus-daemon,856,dbus --system --address=systemd: --nofork --nopidfile …
│ └─{dbus-daemon},871
├─dbus-launch,1523,gdm --exit-with-session /usr/libexec/gnome-session-binary …
├─dnsmasq,1439,nobody --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro…
│ └─dnsmasq,1440,root --conf-file=/var/lib/libvirt/dnsmasq/default.conf …
├─gdm,1347
│ ├─X,1498 :0 -background none -noreset -audit 4 -verbose -auth…
│ │ ├─{X},1499
│ │ ├─{X},1500
│ │ └─{X},1503
│ ├─gdm-session-wor,1511
│ │ ├─gnome-session-b,1515,gdm --autostart /usr/share/gdm/greeter/autostart
│ │ │ ├─gnome-settings-,1616
│ │ │ │ ├─{gnome-settings-},1621
│ │ │ │ ├─{gnome-settings-},1622
│ │ │ │ ├─{gnome-settings-},1623
│ │ │ │ └─{gnome-settings-},1624
│ │ │ ├─gnome-shell,1548
│ │ │ │ ├─ibus-daemon,1586 --xim --panel disable
│ │ │ │ │ ├─ibus-dconf,1590
│ │ │ │ │ │ ├─{ibus-dconf},1594
│ │ │ │ │ │ ├─{ibus-dconf},1596
│ │ │ │ │ │ └─{ibus-dconf},1597
│ │ │ │ │ ├─ibus-engine-sim,1648
│ │ │ │ │ │ ├─{ibus-engine-sim},1650
│ │ │ │ │ │ └─{ibus-engine-sim},1651
│ │ │ │ │ ├─{ibus-daemon},1588
│ │ │ │ │ └─{ibus-daemon},1591
│ │ │ │ ├─{gnome-shell},1550
│ │ │ │ ├─{gnome-shell},1551
│ │ │ │ ├─{gnome-shell},1552
│ │ │ │ ├─{gnome-shell},1554
│ │ │ │ ├─{gnome-shell},1567
│ │ │ │ ├─{gnome-shell},1580
│ │ │ │ ├─{gnome-shell},1581
│ │ │ │ ├─{gnome-shell},1582
│ │ │ │ ├─{gnome-shell},1583
│ │ │ │ └─{gnome-shell},1584
│ │ │ ├─{gnome-session-b},1544
│ │ │ ├─{gnome-session-b},1545
│ │ │ └─{gnome-session-b},1547
│ │ ├─{gdm-session-wor},1512
│ │ └─{gdm-session-wor},1513
│ ├─{gdm},1349
│ ├─{gdm},1350
│ └─{gdm},1497
├─gssproxy,859 -D
│ ├─{gssproxy},862
│ ├─{gssproxy},863
│ ├─{gssproxy},864
│ ├─{gssproxy},865
│ └─{gssproxy},866
├─ibus-x11,1593,gdm --kill-daemon
│ ├─{ibus-x11},1598
│ └─{ibus-x11},1599
├─irqbalance,892 --foreground
├─ksmtuned,939 /usr/sbin/ksmtuned
│ └─sleep,2912 60
├─libvirtd,1342
│ ├─{libvirtd},1353
│ ├─{libvirtd},1354
│ ├─{libvirtd},1355
│ ├─{libvirtd},1356
│ ├─{libvirtd},1357
│ ├─{libvirtd},1358
│ ├─{libvirtd},1359
│ ├─{libvirtd},1360
│ ├─{libvirtd},1361
│ ├─{libvirtd},1362
│ ├─{libvirtd},1366
│ ├─{libvirtd},1367
│ ├─{libvirtd},1368
│ ├─{libvirtd},1369
│ └─{libvirtd},1370
├─lsmd,854,libstoragemgmt -d
├─lvmetad,538 -f
├─packagekitd,1606
│ ├─{packagekitd},1614
│ └─{packagekitd},1615
├─polkitd,849,polkitd --no-debug
│ ├─{polkitd},870
│ ├─{polkitd},875
│ ├─{polkitd},891
│ ├─{polkitd},893
│ └─{polkitd},896
├─pulseaudio,1571,gdm --start --log-target=syslog
│ ├─{pulseaudio},1574
│ └─{pulseaudio},1577
├─rngd,888 -f
├─rsyslogd,890 -n
│ ├─{rsyslogd},919
│ └─{rsyslogd},922
├─rtkit-daemon,855,rtkit
│ ├─{rtkit-daemon},873
│ └─{rtkit-daemon},874
├─smartd,878 -n -q never
├─sshd,1332 -D
│ ├─sshd,1712
│ │ └─bash,1724
│ │ └─su,1816
│ │ └─bash,1819
│ │ └─su,2856 zhangsan
│ │ └─bash,2857,zhangsan
│ └─sshd,2071
│ └─bash,2079
│ └─pstree,2913 -aup
├─systemd-journal,509
├─systemd-logind,877
├─systemd-udevd,537
├─tuned,1333 -Es /usr/sbin/tuned -l -P
│ ├─{tuned},1376
│ ├─{tuned},1377
│ ├─{tuned},1378
│ └─{tuned},1379
├─upowerd,1555
│ ├─{upowerd},1556
│ └─{upowerd},1557
├─vmtoolsd,887
│ └─{vmtoolsd},944
├─wpa_supplicant,1612 -u -f /var/log/wpa_supplicant.log -c/etc/wpa_supplicant/wpa_supplica
└─xdg-permission-,1601,gdm
├─{xdg-permission-},1607
└─{xdg-permission-},1610

5.lsof

lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
lsof 【选项】

 

五、进程启动方式

1.手动启动

  • 前台启动
  • 后台启动

Linux 命令放入后台的方法有两种,分别介绍如下。

“命令 &”,把命令放入后台执行

第一种把命令放入后台的方法是在命令后面加入 空格 &。使用这种方法放入后台的命令,在后台处于执行状态。

注意,放入后台执行的命令不能与前台有交互,否则这个命令是不能在后台执行的
& 后台启动

ctrl+z 挂起进程
jobs -l
bg 序号

2.结束进程

2.1.kill pid号

kill 从字面来看,就是用来杀死进程的命令,但事实上,这个或多或少带有一定的误导性。从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。
也就是说,kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。
kill [信号] PID
kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。Linux 定义了几十种不同类型的信号,读者可以使用 kill -l 命令查看所有信号及其编号,这里仅列出几个常用的信号
 

 

2.2killall 进程名

killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用

2.3pkill

pkill -U 用户 [进程名]
pkill [-t 终端号] 进程名

-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程

-15 SIGTERM 告诉进程需要被关闭请自行停止运行并退出;进程也可以拒绝结束
-9 SIGKILL 表示进程要被终止,需要立即退出,这个信号不能被忽略和捕获的
发送信号给进程

六、一次性任务

1.at 工具

1由包 at 提供
2依赖与atd服务,需要启动才能实现at任务
3执行任务时PATH变量的值和当前定义任务的用户身份一致
4 at 命令的访问控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,具体规则如下:
如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用 at 命令的)。
如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。
如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。

at HH:mm YYYY-MM-DD

 

2.crontab周期性计划任务

 

 crontab -e
#进入 crontab 编辑界面。会打开Vim编辑你的任务

 

crond服务管理

crontab -e
分 时 日 月 周 命令表达式(命令字最好用绝对路径表示)
, - / *

/var/spool/cron/root(或者别的用户)

vim /etc/crontab
分 时 日 月 周 执行用户 命令表达式(命令字最好用绝对路径表示)

使用 crontab 命令管理用户的计划任务
设置用户的周期性计划任务列表主要通过 crontab 命令进行,结合不同的选项可以完成不同的计划任务管理操作。常用的选项如下。
-e:编辑计划任务列表。
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。
-l:列表显示计划任务。
-r:删除计划任务列表。
下面将分别讲解 crontab 命令相关选项的使用。
crontab -u 用户名 #指定XX用户的cron服务
crontab -l #列出当前用户下的cron的详细内容
crontab -u zx -l #列出zx用户下的cron的详细内容
crontab -r #删除所有用户的cron内容,普通用户执行,只删除自己的cron内容
crontab -r -u zx #删除zx用户的cron内容
crontab -e #编辑cron服务
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值