进程和计划任务

文章详细介绍了Linux中的进程概念,包括进程的生命周期、状态、通讯、优先级和分类。还讨论了进程管理,如kill命令的使用,以及如何通过ps命令查看进程信息。此外,提到了内存管理和计划任务,如at和crontab的使用方法。
摘要由CSDN通过智能技术生成

进程和计划任务

一.进程

1.进程是什么

进程是程序载入内存中的副本,是资源调度的单位

每一个进程都有一个PID号

进程通常从执行进程的用户继承

进程存在生命周期

进程都有父进程

进程的创建:

init:第一个进程

systemd:centos7中第一个进程,是所有进程的父进程

2.进程的特性

进程具有

动态性:进程是程序执行过程,有生命周期,可以存在,可以消失

并发性:同一个程序中可以有多个进程同时执行

独立性:进程是系统资源分配的一个独立单位

结构性:进程由程序,数据,进程控制块组成

pstree命令可以看到程序是单线程还是多线程
-p选项可以显示PID号
[root@localhost ~]#pstree -p
systemd(1)─┬─ModemManager(861)─┬─{ModemManager}(879)
           │                   └─{ModemManager}(902)
           ├─NetworkManager(957)─┬─{NetworkManager}(965)
           │                     └─{NetworkManager}(969)
           ├─VGAuthService(851)
           ├─abrt-dbus(17045)─┬─{abrt-dbus}(17046)
           │                  ├─{abrt-dbus}(17047)
           │                  └─{abrt-dbus}(17048)
.............


prtstat PID号可以看到进程的详情
[root@localhost ~]#prtstat 635
Process: systemd-udevd 		State: S (sleeping)
  CPU#:  1  		TTY: 0:0	Threads: 1
Process, Group and Session IDs
  Process ID: 635		  Parent ID: 1
    Group ID: 635		 Session ID: 635
  T Group ID: -1

Page Faults
  This Process    (minor major):     3570        14
  Child Processes (minor major):    59090       210
CPU Times
  This Process    (user system guest blkio):   0.08   0.48   0.00   0.01
  Child processes (user system guest):         1.37   7.14   0.00
Memory
  Vsize:       48 MB     
  RSS:         1269 kB    		 RSS Limit: 18446744073709 MB
  Code Start:  0x5571e6ac9000		 Code Stop:  0x5571e6b13390
  Stack Start: 0x7ffc3fe5a080
  Stack Pointer (ESP): 0x7ffc3fe59938	 Inst Pointer (EIP): 0x7fbfb34c8903
Scheduling
  Policy: normal
  Nice:   0 		 RT Priority: 0 (non RT)
//Threads:1表示为单线程

3.进程与内存

内存泄漏:Memory Leak

指程序中用malloc或new申请了一块内存,但是没有用free或delete将内存释放,导致这块内存一直处于占用状态

内存溢出:Memory Overflow

指程序申请了10M的空间,但是在这个空间写入10M以上字节的数据,就是溢出,类似红杏出墙

内存不足:OOM

java程序会先启动JVM虚拟机,再在虚拟机上运行程序,所以会占用很多内存

4.进程状态

创建状态

进程在创建时系统会给进程调度资源,如果无法满足,那么进程就进入创建状态

就绪状态

进程准备完毕,资源条件满足,准备分配到cpu运行

执行状态

就绪状态之后的状态,进入cpu进行执行

阻塞状态

执行中的进程无法运行,进入阻塞。必须等到I/O请求,申请缓存区的请求满足后才能进入就绪状态

终止状态

进程结束,或者错误,被系统终止,无法再执行

5.进程通讯

同一主机:通过pipe管道(单向)或者socket套接字(双向)

不同主机:需要ip地址和端口号

6.进程优先级

一般进程的优先级都是默认的,可以通过设置进程NI(-20~19)来设置进程优先级,优先级=PRI+NI,数值越低,优先级越高

7.进程分类

操作系统分类

协作式多任务:早期的windows系统使用,一个任务会霸占一整个cpu,效率十分低

抢占式多任务:linux内核,cpu会轮流处理任务,一定时间后会剥夺任务使用权,执行下一个任务,由此循环

进程类型

守护进程:daemon,在系统引导过程中启动的进程,和终端无关

前台进程:和终端相关,通过终端启动的进程

二.进程管理

1.kill

kill -s 信号名称 PID

kill -信号代号 PID

可以使用命令"kill -l"或"man 7 signal"来查询

信号代号信号名称说明
1SIGHUP让进程立即关闭.然后重新读取配置文件之后重启
2SIGINT程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键
3SIGQUIT退出
8SIGFPE在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误
9SIGKILL用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。一般用于强制中止进程,如果程序在传输数据,可能导致数据丢失
15SIGTERM正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9
19SIGSTOP该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断

2.查看进程信息

ps

静态查看进程信息,linux系统中进程的相关信息保存在/proc/进程PID/status下文件中

ps支持三种选项格式

UNIX选项:-A -e等

GNU选项:–help

BSD选项:a

//ps aux可以查看系统中所有的进程

[root@localhost ~]#ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.2 194504  4940 ?        Ss   06:05   0:02 /usr/lib/systemd/syste
root          2  0.0  0.0      0     0 ?        S    06:05   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    06:05   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   06:05   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    06:05   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    06:05   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        S    06:05   0:02 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S    06:05   0:00 [watchdog/0]
root         11  0.0  0.0      0     0 ?        S    06:05   0:00 [watchdog/1]
  
....  
//ps -le还能看到父进程的PID和优先级
[root@localhost ~]#ps -le
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0      1      0  0  80   0 - 48626 ep_pol ?        00:00:02 systemd
1 S     0      2      0  0  80   0 -     0 kthrea ?        00:00:00 kthreadd
1 S     0      3      2  0  80   0 -     0 smpboo ?        00:00:00 ksoftirqd/0
1 S     0      5      2  0  60 -20 -     0 worker ?        00:00:00 kworker/0:0H
1 S     0      7      2  0 -40   - -     0 smpboo ?        00:00:00 migration/0
1 S     0      8      2  0  80   0 -     0 rcu_gp ?        00:00:00 rcu_bh
1 S     0      9      2  0  80   0 -     0 rcu_gp ?        00:00:02 rcu_sched
5 S     0     10      2  0 -40   - -     0 smpboo ?        00:00:00 watchdog/0
...........
//ps -l只能看到当前shell产生的进程
[root@localhost ~]#ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  17026  17022  0  80   0 - 29144 do_wai pts/2    00:00:00 bash
0 R     0  18506  17026  0  80   0 - 37235 -      pts/2    00:00:00 ps

选项说明
a显示当前终端下的所有进程信息,包括其他用户的进程
u使用以用户为主的格式输出进程信息。
x显示当前用户在所有终端下的进程信息。
-e显示系统内的所有进程信息。
-l使用长(Long)格式显示进程信息。
-f使用完整的(Full)格式显示进程信
k对属性排序,属性前加 - 表示倒序 ps aux k -%cpu

STAT:进程状态
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前台进程
l: 多线程进程
L:内存分页并带锁
N:低优先级进程
<: 高优先级进程
s: session leader,会话(子进程)发起者
I:Idle kernel thread,CentOS 8 新特性

ni: nice值
pri: priority 优先级

相加得到实际优先级,可手动设置ni

查看进程信息 prtstat

[root@localhost ~]#prtstat 18495
Process: kworker/9:2   		State: S (sleeping)
  CPU#:  9  		TTY: 0:0	Threads: 1
Process, Group and Session IDs
  Process ID: 18495		  Parent ID: 2
    Group ID: 0		 Session ID: 0
  T Group ID: -1

Page Faults
  This Process    (minor major):        0         0
  Child Processes (minor major):        0         0
CPU Times
  This Process    (user system guest blkio):   0.00   0.00   0.00   0.00
  Child processes (user system guest):         0.00   0.00   0.00
Memory
  Vsize:       0 B       
  RSS:         0 B        		 RSS Limit: 18446744073709 MB
  Code Start:  0         		 Code Stop:  0         
  Stack Start: 0         
  Stack Pointer (ESP):          0	 Inst Pointer (EIP):          0
Scheduling
  Policy: normal
  Nice:   0 		 RT Priority: 0 (non RT)

top

实时显示进程信息

选项说明
-d指定 top 命令每隔几秒更新
-b使用批处理模式输出
-n次数
-p仅查看指定 ID 的进程
-s使 top 命令在安全模式中运行,避免在交互模式中出现错误
-u只监听某个用户的进程

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

? 或 h:显示交互模式的帮助;

c:按照 CPU 的使用率排序,默认就是此选项;

M:按照内存的使用率排序;

N:按照 PID 排序;

T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;

k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;

r:按照 PID 给某个进程重设优先级(Nice)值;

q:退出 top 命令;

[root@localhost ~]#top
top - 19:16:22 up 13:10,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 278 total,   1 running, 277 sleeping,   0 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,   177888 free,   789304 used,   899856 buff/cache
KiB Swap:  4194300 total,  4175808 free,    18492 used.   822852 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND           
 18802 root      20   0  157848   2376   1544 R   0.3  0.1   0:00.06 top               
     1 root      20   0  194504   4940   2828 S   0.0  0.3   0:02.85 systemd           
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.03 kthreadd          
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.69 ksoftirqd/0       
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H      
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 migration/0       
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh            
     9 root      20   0       0      0      0 S   0.0  0.0   0:02.07 rcu_sched     
     ..........

top首部信息显示:

uptime信息:l命令

tasks及cpu信息:t命令

cpu分别显示:1 (数字)

memory信息:m命令

退出命令:q

修改刷新时间间隔:s

终止指定进程:k

保存文件:W

htop同样可以查看,但是需要安装

pidof

当已知程序名不知道pid号

[root@localhost ~]#pidof systemd
1
//可以根据进程名查看PID

pstree

可以树形查看进程信息

-a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等

-p 显示PID

-u 显示用户切换

lsof

列举系统中已经被打开的文件

选项功能
-c只列出以字符串开头的进程打开的文件。
+d列出某个目录中所有被进程调用的文件。
-u只列出某个用户的进程打开的文件。
-p列出某个 PID 进程打开的文件。

3.监控系统资源 虚拟资源

vmstat

监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。

[root@localhost ~]#vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0  18488 175456     40 902732    0    0     3     2    9    8  0  0 100  0  0

选项说明
-fs-f:显示从启动到目前为止,系统复制(fork)的程序数,此信息是从 /proc/stat 中的 processes 字段中取得的。 -s:将从启动到目前为止,由一些事件导致的内存变化情况列表说明
-S令输出的数据显示单位,例如用 K/M 取代 bytes 的容量。
-d列出硬盘有关读写总量的统计表。
-p查看硬盘分区的读写情况。

4.内存

free -m 以m为单位查看

free -h

pmap 1073
查看进程占用 内存的详细信息

[root@localhost ~]#free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        769M        171M        3.7M        881M        803M
Swap:          4.0G         18M        4.0G

5.iostat

iostat 可以提供更丰富的IO性能状态数据

[root@localhost ~]#iostat
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 	2023年07月27日 	_x86_64_       (16 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.01    0.01    0.01    0.00    0.00   99.97

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.05        52.47        31.68    2535708    1531027
scd0              0.00         0.02         0.00       1050          0
dm-0              1.04        51.67        31.24    2497179    1509539
dm-1              0.12         0.13         0.40       6288      19380

-c 只显示CPU行
-d 显示设备〈磁盘)使用状态
-k 以千字节为为单位显示输出
-t 在输出中包括时间戳
-x 在输出中包括扩展的磁盘指标

三.命令的前后台执行

前台启动:通过终端启动,且启动后一直占据终端

后台启动:可通过终端启动,但启动后即转入后台运行(释放终端)

1.置于后台执行

运行中的作业: Ctrl+z 放到后台 但是会停止作业

尚未启动的作业: COMMAND &

[root@localhost /]#dd if=/dev/zero of=/dev/null &
[1] 11255
[root@localhost /]#jobs      //可查看后台运行的程序
[1]+  运行中               dd if=/dev/zero of=/dev/null &
[root@localhost /]#fg 1   //查看后台的命令1
dd if=/dev/zero of=/dev/null
^Z                        //ctrl+z停止
[1]+  已停止               dd if=/dev/zero of=/dev/null

[root@localhost /]#dd if=/dev/zero of=/dev/null &
[3] 11418
[root@localhost /]#kill %3
[root@localhost /]#fg
-bash: fg: 任务已经终止
[2]-  已终止               dd if=/dev/zero of=/dev/null
[3]+  已终止               dd if=/dev/zero of=/dev/null
// kill  %+序号 也可以停止


//或者killall 进程名也可以,但是很不安全稳定

四.计划任务

1.at一次性任务

需要安装atd软件包

at任务队列存放于/var/spool/at目录下

执行任务时的PATH变量与当前定义任务的用户一致

at [option] TIME
at [选项] [yyyy-mm-dd]

[root@localhost /]#at 12:20 2023-07-28
at> touch /opt/woshidanb.txt<EOT>
job 1 at Fri Jul 28 12:20:00 2023
//在2023-07-28的12:20创建文件
[root@localhost /]#atq
1	Fri Jul 28 12:20:00 2023 a root
//atq可以查看计划的任务

2.crontab

crontab [选项] [file]

选项说明
-u指定某个用户的crontab服务
-e编辑用户的crontab用户内容,设置任务
-l显示用户的crontab的文件内容
-r从/var/spool/cron删除用户的crontab文件
-i删除用户的crontab文件
crontab -e进入编辑界面
* * * * * command
*含义范围
第一个minute0-59
第二个hour0-23
第三个day1-31
第四个month1-12
第五个week0-7(0,7都代表周日)

*表示任何时间

,不连续的时间

-范围

/表示每隔多长时间执行一次

[root@localhost opt]#crontab -e


*/1 * * * * cp /etc/passwd  /opt

//每一分钟就把passwd复制到opt下

[root@localhost opt]#ls
passwd


注意事项:

6 个选项都不能为空

在定义时间时,日期和星期最好不要在一条定时任务中出现

在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值