1、前台进程和后台进程
前台进程
在 shell 提示处理打入命令后,创建一个子进程,运行命令, Shell 等待命令退出,然后返回到对用户给出提示符。这条命令与 Shell 异步运行,即在前台运行,用户在它完成之前不能执行别一个命令 。
后台进程
在 Shell 提示处打入命令,若后随一个 &, Shell 创建子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与 Shell 同步运行,即在后台运行。“后台进程必须是非交互式的” 。
2、进程状态
在多任务处理操作系统中,每个CPU在一个时间点上只能处理一个进程。在进程运行时,它对CPU时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境要求而改变。
3、进程优先级
Linux 进程调度及多任务:每个CPU在一个时间点上只能处理一个进程,通过时间片技术,Linux实际能够运行的进程和线程数可以超出实际可用的CPU及核心数量。
相对优先级 nice:由于不是每个进程都与其他进程同样重要,可告知进程调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略为 SCHED_OTHER (也称为SCHED_NORMAL),但还有其它一些调度策略用于不同的目的。SCHED_OTHER 调度策略运行的进程的相对优先级称为进程的 nice 值,可以有40种
不同级别的nice值。
nice 值越高: 表示优先级越低
例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低: 表示优先级越高
例如-20,该进程更不倾向于让出CPU。
4、查看进程的nice级别
(1)、使用top查看nice级别
(2)、使用ps查看nice级别
pid,command,nice可自由结合
[root@nebulalinux03 ~]# ps axo pid,command,nice --sort=-nice
[root@192 /]# ps axo pid,command,nice --sort=-nice
PID COMMAND NI
36 [khugepaged] 19
35 [ksmd] 5
1 /sbin/init 0
2 [kthreadd] 0
3 [migration/0] -
[root@nebulalinux03 ~]# ps axo pid,command,cls --sort=-nice
[root@192 /]# ps axo pid,command,cls --sort=-nice
PID COMMAND CLS
36 [khugepaged] TS
35 [ksmd] TS
1 /sbin/init TS
2 [kthreadd] TS
3 [migration/0] FF
[root@nebulalinux03 ~]# ps axo pid,cls --sort=-nice
[root@192 /]# ps axo pid,nice --sort=-nice
PID NI
36 19
35 5
1 0
2 0
3 -
TS 表示该进程使用的调度策略为SCHED_OTHER
启动具有不同nice级别的进程
启动进程时,通常会继承父进程的 nice级别,默认为0。
5、更改现有进程的nice级别
(1)、使用top更改nice级别
r 调整进程的优先级 (-20高) ---0--- (19低)
(2)、使用shell更改nice级别
[root@192 /]# sleep 7000 &
[1] 2536
[root@192 /]# renice -2010089
Usage:
renice [-n] priority [-p|--pid] pid [... pid]
renice [-n] priority -g|--pgrp pgrp [... pgrp]
renice [-n] priority -u|--user user [... user]
renice -h | --help
renice -v | --version
1、/proc 正在运行的内核信息映射
2、/sys 硬件设备的驱动程序信息
sysfs是一种基于ram文件系统和proc一样。
Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。其实,就是在用户态可以通过对sys文件系统的访问,来看内核态的一些驱动或者设备等。
[root@192 /]# cd sys/
[root@192 sys]# ls
block bus class dev devices firmware fs hypervisor kernel module power
shell控制的是作业,而不是进程,shell还可以分前后台对作业进行控制。
1、进程和作业的区别:
区别:进程是一个程序在一个数据集上的一次执行,而作业是用户提交给系统的一个任务。
关系:一个作业通常包括几个进程,几个进程共同完成一个任务,即作业。
shell控制的是作业,而不是进程,shell还可以分前后台对作业进行控制。
2、什么是作业
一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令
作业控制指的是:控制正在运行的进程的行为,比如:启动、停止、强制终止、恢复以及异步运行作业的这些功能,让shell可以在子进程运行期间返回接受其他命令。
一般而言,进程与作业控制相关联时,才被称为作业。
shell分前后台控制的不是进程,而是作业或者进程组,一个前台只能运行一个进程组或一个作业,而一个后台可以运行多个进程组和多个作业。
查看被挂起的进程( jobs )
[root@192 sys]# jobs
[1]+ Running sleep 7000 & (wd: /)
复到前台继续运行( fg )
[root@192 sys]# fg
sleep 7000 (wd: /)
恢复到后台继续运行( bg)
[root@192 sys]# bg %2 //让作业2在后台运行