linux系统进程和计划任务管理

Posted 世界美好與你環環相扣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统进程和计划任务管理相关的知识,希望对你有一定的参考价值。

一.程序和进程的关系

程序:保存在磁盘,光盘等介质中的可执行代码和数据的静态集合
进程:在CPU及内存中处于执行状态的计算机程序

进程是个动态的概念,他是随着程序运行而开启,程序不运行来了他也就不存在了
进程是程序执行的过程
每个程序可以创建一个或多个进程

二.进程的分类和属性

1.父进程

已创建一个或多个子进程的进程。在UNIX里,除了进程0以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程。

2.子进程

是由另一进程(对应称之为父进程)所创建的进程。子进程继承了对应的父进程的大部分属性,如文件描述符。在Unix中,子进程通常为系统调用fork的产物。在此情况下,子进程一开始就是父进程的副本,而在这之后,根据具体需要,子进程可以借助exec调用来链式加载另一程序。

3.僵尸进程

僵尸进程是处于僵死状态的进程(只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程便进入Z状态)
产生原因:子进程先于父进程退出,父进程(使用wait()系统调用)没有读取到子进程退出的返回代码,这时候子进程为了保存退出原因,因此进入僵死态不会释放所有资源。僵死进程会以终止状态保持在进程表中,并且会⼀直在等待父进程读取其退出状态代码。

4.孤儿进程

相对于僵尸进程,那么必须提到的就是孤儿进程,同僵尸进程相反,假如父进程先于子进程退出,子进程便进入后台运行,成为孤儿进程,孤儿进程随后会被1号init进程领养并回收,也就是将其父进程变为init进程。

5.进程的生命周期和状态

生命周期:每个进程它是由自己的父进程fork出来的子进程,相当于复制了一份出来,继承自己的父进程的一些资源如权限,内存空间等,当运行完毕之后告诉父进程自己结束了,父进程就会把它结束掉

6.五大状态

R正在运行或等待运行或可以被运行的意思
S可中断睡眠 被挂起
D不可中断睡眠(例如对写进行保护,磁盘在写数据时不希望被打断)
T停止进程
Z僵尸进程:该进程应该已经终止但是其父进程无法正常的终止他
(X死掉的进程)

7.进程的属性

进程id 唯一识别一个进程的
父id
启动进程的用户id
进程状态
进程优先级
进程所连接的终端名
进程资源的占用,内存占用比,cpu占用比

三.进程的相关命令

PS命令

使用ps指令即可查看当前系统中正在执行的进程的各种进程信息

ps  aux  显示当前用户下所有的终端信息
[root@localhost home]# ps -o user,pid 指定要输出的内容
USER        PID
root      10358
root      16602
root      17175
root      19103

在这里插入图片描述
USER:启动改进程的用户账号和名称
PID:该进程在系统中的ID号,在当前系统中是唯一的
TTY:表明该进程在哪个终端上进行
STAT:显示了进程当前的状态
TIME:该进程占用CPU时间
COMMAND:启动该进程的命令名称
%CPU:CPU占用的百分比
%NEM:内存占用的百分比
VSZ:占用虚拟内存(swap空间)的大小
RSS:占用常驻内存(物理内存)的大小
最后一列如果是用[]表示内核态的进程,否则是用户启动的进程

STAT状态位常见的状态字符

D      //无法中断的休眠状态(通常 IO 的进程); 
R      //正在运行可中在队列中可过行的; 
S      //处于休眠状态; 
T      //停止或被追踪; 
W      //进入内存交换 (从内核2.6开始无效); 
X      //死掉的进程 (基本很少见); 
Z      //僵尸进程; 
<      //优先级高的进程 
N      //优先级较低的进程 
L      //有些页被锁进内存; 
s      //控制性进程(在它之下有子进程); 
l      //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads); 
+     //位于后台的进程组;

linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。

ps -elf 命令

则以长格式显示系统中的进程信息,输出信息包含PPID(对应进程的父进程PID号)

ps -elf 则以长格式显示系统中的进程信息
ps -ef | awk '$3==1' 查看PPID=1的进程

在这里插入图片描述
TTY 表示终端 ?没有终端 1表示本地终端 pts/0 通过远程连接的
PID是随机产生的

在这里插入图片描述

  • ADDR/SZ/WCHAN:都与内存有关,ADDR表示该进程在内存的哪个部分,如果是个running的进程,一般会显示【-】,SZ表示该进程用掉了多少内存,WCHAN表示进程是否运行,【-】表示正在运行
    PRI越小越优先,NI(NICE值 用来调整优先级大小,于PRI成对出现)
ps aux | grep bash  检索bash的信息
ps -elf |  grep  bash    检索bash的信息以长格式显示

top命令——查看进程动态信息
以动态刷新的方式显示各进程的状态信息 默认排序按CPU从大到小 类似于windows系统的任务管理器
在这里插入图片描述
load average :平均负载,程序等待CPU的运行 >1表示超负载 <1表示正常

查看系统平均负载:
top | head -1
uptime
cat /proc/loadavg

开头显示了系统任务(Tasks), CPU占用,内存占用(Mem),交换空间(Swap)
系统任务(Tasks)信息:total,总进程数;running,正在运行的进程数;sleeping,休眠的进程数;
stopped,中停的进程数;zombie,僵死无响应的进程数
CPU占用信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲cpu; wa,I//O等待占用,hi,硬件中段占用;st,虚拟化占用。要了解空闲的CPU百分比,主要看%id部分。
内存占用(Mem)信息:total,总内存空间;used,已用交换空间;free,空间内存。buffers,缓冲区域,cache 缓存空间
交换空间(Swap)占用:total,总交换空间,used,已用交换空间;free,空间内存,avail 有用的空间

快捷键命令:M(内存) P(CPU) N(PID号)s(该更新时间,默认3S)
Z(变色) 多个CPU按数字1显示多个CPU k(显示CPU占用高的进程并杀掉)

pstree 命令——查看进程树

 pstree -aup    P表示对应的PID a表示完整的命令信息   u可以列出对应的用户名

pgrep命令-----查询进程信息

pgrep -l log  查询进程包含log的进程及其PID
[root@localhost home]# pgrep -l pickup   显示进程名和进程号
14570 pickup
[root@localhost home]# pgrep -U postfix // -U后加用户会过滤出用户运行的进程号
6839
14570
[root@localhost home]# pgrep -U postfix -l //查询用户下运行的进程和进程号
6839 qmgr
14570 pickup
pgrep -t  tty1  查看tty1 的进程 
[root@localhost ~]# pgrep -l sshd
6496 sshd
20550 sshd
[root@localhost ~]# pgrep -l -o sshd  当匹配多个时,检索PID最小的那个进程
6496 sshd
[root@localhost ~]# pgrep -l -n sshd  当匹配多个时,检索PID最大的那个进程
20550 sshd


启动进程
在Linux系统中,可以由用户手工启动或者按预定计划调度启动新的进程。手工启动又分为前台启动和后台启动

 cp /dev/sr0 /home/d  &  &放在命令后面,进程启动后会直接放入后台运行
[1] 16237
jobs -l 查看当前终端中在后台运行的进程任务  // -l同时显示该进程对应的PID
Ctrl +Z 讲当前进程挂起
bg  可以将后台中暂停的任务恢复运行,继续在后台执行操作
fg  将后台任务恢复到前台运行   

终止进程执行

Ctrl +C 强制中断
kill 1602   杀死进程  // 友好的方式  等于 -15
kill -9 16778  强制杀死
kill -9 %1:杀死后台进程号1
kill -1 重启
killall  可以以进程名来杀死进程
root@localhost ~]# killall -9 vim
[root@localhost ~]# jobs -l
[1]- 21559 已杀死               vim a
[2]+ 21568 已杀死               vim b
pkill 可以根据进程的名称,运行该进程的用户,
[root@localhost ~]# pkill -9 -U postfix
[root@localhost ~]# pgrep -U postfix -l
pkill -f "ping 8.8.8.8" 终止程序

以上是关于linux系统进程和计划任务管理的主要内容,如果未能解决你的问题,请参考以下文章

linux系统进程和计划任务管理

Linux系统中查看进程和计划任务管理

Centos进程作业管理与计划任务

Linux系统管理——进程和计划任务

linux中进程和计划任务的管理

Linux系统管理10-进程和计划任务管理