进程管理

三:管理进程状态 kill

当程序运行为进程后,如果希望停止进程,怎么办呢? 那么此时我们可以使用linux的kill命令对进程发送关闭信号。当然除了kill、还有killall,pkill
kill使用pid关闭进程;killall,pkill使用进程名称关闭进程
1.使用kill -l可以查看系统所支持的信号

[root@syc~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

虽然linux支持信号很多,但是我们仅列出我们最为常用的3个信号

    数字编号			信号含义      	信号翻译 
	1				SIGHUP		通常用来重新加载配置文件
	9				SIGKILL		强制杀死进程
   	15				SIGTERM		终止进程,默认kill使用该信号

#1.给 vsftpd 进程发送信号 1,9,15

#1.给 vsftpd 进程发送信号 1,15
[]root@syc~]# yum install vsftpd             	##安装vsftpd
[root@syc~]# systemctl start vsftpd				## 启动服务	
[root@syc~]# ps aux |grep vsftpd				##过滤服务进程号
root       2052  0.0  0.0  53284   572 ?        Ss   10:19   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftp.conf
root       2969  0.0  0.0 112728   976 pts/0    R+   16:00   0:00 grep --color=auto vsftpd
#2.发送重载信号,例如 vsftpd 的配置文件发生改变,希望重新加载
[root@syc~]# kill -1 2052						##信号1重新加载配置文件会改变子进程pid		
[root@syc~]# ps aux |grep vsftpd
root       2052  0.0  0.0  53284   756 ?        Ss   10:19   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftp.conf
root       3009  0.0  0.0 112728   976 pts/0    S+   16:30   0:00 grep --color=auto vsftpd
#3.发送停止信号,当然vsftpd 服务有停止的脚本 systemctl stop vsftpd
[root@syc~]# kill 2052							##默认15终止进程要等到执行完任务才会关闭
[root@syc~]# ps aux |grep vsftpd
root       3011  0.0  0.0 112728   976 pts/0    R+   16:31   0:00 grep --color=auto vsftpd
#4.发送强制停止信号,当无法停止服务时,可强制终止信号
[root@syc~]# kill -9 3053

2.Linux系统中的killall、pkill命令用于杀死指定名字的进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killallpkill把这两个过程合二为一,是一个很好用的命令。

#1、通过服务名称杀掉进程
[root@syc~]# killall vsftpd
[root@syc~]# pkill vsftpd
#2.使用pkill踢出从远程登录到本机的用户,终止pts/0上所有进程, 并且bash也结束(用户被强制退出)
[root@syc~]# pkill -9 -t pts/0

四:管理后台进程 screen ( 前台 后台 ) -->out ( jobs bg fg )

1.什么是后台进程
通常进程都会在终端前台运行,一旦关闭终端,进程也会随着结束,那么此时我们就希望进程能在后台运行,就是将在前台运行的进程放入后台运行,这样及时我们关闭了终端也不影响进程的正常运行。
2.使用什么工具将进程放入后台
早期的时候大家都选择使用&符号将进程放入后台,然后在使用jobs、bg、fg等方式查看进程状态,但太麻烦了。也不直观,所以我们推荐使用screen。

1.了解

1.jobs、bg、fg的使用(强烈不推荐,了解即可)

[root@xuliangwei ~]# sleep 3000 & //运行程序(时),让其在后台执行 
[root@xuliangwei ~]# sleep 4000 //^Z,将前台的程序挂起(暂停)到后台 
[2]+ Stopped sleep 4000
[root@xuliangwei ~]# ps aux |grep sleep
[root@xuliangwei ~]# jobs  //查看后台作业
[1]- Running sleep 3000 & 
[2]+ Stopped sleep 4000

[root@xuliangwei ~]# bg %2     //让作业 2 在后台运行
[root@xuliangwei ~]# fg %1     //将作业 1 调回到前台
[root@xuliangwei ~]# kill %1   //kill 1,终止 PID 为 1 的进程

[root@xuliangwei ~]# (while :; do date; sleep 2; done) & //进程在后台运行,但输出依然在当前终端
[root@xuliangwei ~]# (while :; do date; sleep 2; done) &>/dev/null &
2.screen重新打开一个窗口
		 选项:-list		查看打开的新窗口
		 	 -r加窗口id	进入窗口
		 	 -s			指定窗口名称

操作实例

#1.打开新的窗口
[root@syc~]# screen 
2.指定打开一个名字为wyk的窗口-----加大S
[root@syc~]# screen -S WYK
[root@syc~]# screen -list				##查看所有窗口--------加-list
There is a screen on:
        3285.WYK        (Attached)
1 Socket in /var/run/screen/S-root.
现在已经在新打开的wyk窗口下可以执行一个top查看进程状态,Ctrl+a+d平滑退出窗口,这个命令还会在后台运行,
就算关了终端也不会退出,也是需要exit来关闭新建的screen窗口
#2平滑的退出screen,但不会终止screen中的任务。注意: 如果使用exit 才算真的关闭screen窗口
#3进入正在运行的screen						##-r可以加id号也可以加名字进入
[root@syc~]# screen -r wyk
[root@syc~]# screen -r 3285

五:进程的优先级[进阶] nice

在启动进程时,为不同的进程使用不同的调度策略。
nice 值越高: 表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低: 表示优先级越高,例如-20,该进程不倾向于让出CPU。 最高的优先级

低       正常      高
+20      0       -20
1. 使用top或ps命令查看进程的优先级
#1.使用top可以查看nice优先级。  NI: 实际nice级别,默认是0。 PR: 显示nice值,-20映射到0,+19映射到39
PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
1083 root      20   0  298628   2808   1544 S  0.3  0.1   2:49.28 vmtoolsd
5    root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:+
#2.使用ps查看进程优先级
[root@m01 ~]# ps axo command,nice |grep sshd|grep -v grep
/usr/sbin/sshd -D             0
sshd: root@pts/2              0
2.nice指定优先级

语法格式 nice -n 优先级数字 进程名称

#1   
3.renice修改优先级

语法格式 renice -n 优先级数字 进程pid

#1.查看vim的进程id,名称,nice(优先级)
[root@syc~]# ps axo pid,command,nice |grep vim |grep -v grep	#查找后进行过滤
 3621 vim                         -20

#2.修改vim的优先级为-20
[root@syc~]# renice -n -20 3621
3621 (进程 ID) 旧优先级为 0,新优先级为 -20

#3.查看vim的优先级(这个过滤的是id号,什么过滤的是名字)
[root@syc~]# ps axo pid,command,nice |grep 3621
 3621 vim                         -20
 3629 grep --color=auto 3621      -20

6.系统平均负载[进阶] load

每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况。比如像下面这样,我在命令行里输入了 uptime 命令,系统也随即给出了结果。

[root@m01 ~]# uptime
04:49:26 up 2 days, 2:33, 2 users, load average: 0.70, 0.04, 0.05
#我们已经比较熟悉前面几列,它们分别是当前时间、系统运行时间以及正在登录用户数。
而最后三个数字呢,依次则是过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average)。

平均负载不就是单位时间内的 CPU 使用率吗?上面的 0.70,就代表 CPU 使用率是 70%。其实上并不…

1.什么是平均负载
  • 平均负载是指单位时间内,系统处于 可运行状态R 和 不可中断状态D 的平均进程数,也就是平均活跃进程数
    平均负载其实就是单位时间内的活跃进程数。 ( 可运行状态R + 不可中断状态D )
    平均负载要看的是三个值(1,5,15分钟),不是一个。
2.可运行状态和不可中断状态是什么

1.可运行状态进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们ps 命令看到处于 R 状态的进程。
2.不可中断进程,(你做什么事情的时候是不能打断的?) 系统中最常见的是等待硬件设备的 I/O 响应,也就是我们 ps 命令中看到的 D 状态(也称为 Disk Sleep)的进程。

3.那平均负载为多少时合理

最理想的状态是每个 CPU 上都刚好运行着一个进程,这样每个 CPU 都得到了充分利用。所以在评判平均负载时,首先你要知道系统有几个 CPU,这可以通过 top 命令获取,或grep ‘model name’ /proc/cpuinfo

例1、假设现在在 4、2、1核的CPU上,如果平均负载为 2 时,意味着什么呢?
Q1.在4 个 CPU 的系统上,意味着 CPU 有 50% 的空闲。
Q2.在2 个 CPU 的系统上,意味着所有的 CPU 都刚好被完全占用。
Q3.而1 个 CPU 的系统上,则意味着有一半的进程竞争不到 CPU。
PS: 平均负载有三个数值,我们应该关注哪个呢?
平均负载要看的是三个值,不是一个。

4.平均负载与 CPU 使用率有什么关系

在实际工作中,我们经常容易把平均负载和 CPU 使用率混淆,所以在这里,我也做一个区分。可能你会疑惑,既然平均负载代表的是活跃进程数,那平均负载高了,不就意味着 CPU 使用率高吗?
我们还是要回到平均负载的含义上来,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。

而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如:
1.CPU 密集型进程,使用大量 CPU 计算会导致平均负载升高,此时这两者是一致的; ( 视频的转码 加密 计算圆周率 )
2.I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高; 关注wa
3.大量的 CPU 进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。

  • 查看步骤:
    1.uptime看看负载的情况 ( 超过了 cpu的核心 )
    2.top看是cpu的使用率高 还是 wa等待高 还是内核态占用cpu高 、软中断高 、nice优先级进程占用cpu、
    3.top看是哪个进程
    4.追踪这个进程的情况。
    5.看看是否存在异常日志。

故障案例:
将物理机的数据库 迁移到了阿里云 配置一样
问题: 迁移过去后 发现负载很高,平常负载 1-2 4 5 的状态。
top看了一眼,发现了 wa 非常的高 达到了百分之 50-60%

物理机的磁盘的每s读写:400MB/s SAS盘
测试云主机的磁盘每s读写:100MB/s   云主机使用的都是  (SATA盘)=高效云盘  替换 SSD 云盘  300-400MB/s

如果出现无法使用mpstat、pidstat命令查看 %wait指标建议更新下软件包
rpm -Uvh http://pagesperso-orange.fr/sebastien.godard/sysstat-11.7.3-1.x86_64.rpm

三、实验内容与要求 1、熟悉windows的编程接口,使用系统调用编程实现将参数1对应文件1.txt和参数2对应文件2.txt的内容合并到参数3对应文件zong.txt中(上传文件名为学号后5位ex0701.c)。 2、使用windows提供的命令将文件1.txt和文件2.txt的内容合并到文件total.txt中 (请将实现的操作命令写入下题批处理文件的第一行)。 3、主管助理小张经常接收公司员工发来的文件,开始为了节省时间,小张将下载的文件都保存在文件夹xiazai中(文件名如图1所示,下载后直接解压即可),这样不便于后期的统计和分类管理,现在领导要求必须为所有员工(90人)每人单独建立一个文件夹(以员工工号命名10201、10202......10290),然后将他们提交的文件分别剪切到各自对应的文件夹中(如图2所示)。于是小张开始为7名员工建立文件夹,再一个一个的去做……同学们想想有没有一种方法能快速完成所要求的操作呢? 请熟悉windows的命令接口,使用windows提供的常用命令copy、md、del等编写一个批处理文件(上传文件名为学号后5位ex0703.bat),实现所要求的功能: 1、启动linux系统或通过windows telnet到linux。 2、用huas用户名和密码123456登入系统中。 3、打开一终端窗口(在linux桌面上单击右键,选择从终端打开)。然后在其中输入以下命令实验。 4、熟悉常用操作命令. 5、编辑如下源代码(实验教材P86 1.进程的创建)并保存 二、实验目的 (1)加深对进程概念的理解,明确进程和程序的区别。 (2)分析进程竞争资源现象,学习解决进程互斥的方法。 (3了解Linux系统中进程通信的基本原理。 三、实验内容与要求 (1)任务一:编写一段程序,使其实现进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止 Parent Process is Killed! (2)任务二:在上面的程序中增加语句signal (SIGNAL, SIG-IGN)和signal (SIGQUIT, SIG-IGN),观察执行结果,并分析原因。 (3)任务三:进程的管道通信 编制一段程序,实现进程的管道通信。 使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道中写一句话: Child 1 is sending a message! Child 2 is sending a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。 二、实验目的 自行编制模拟程序,通过形象化的状态显示,加深理解进程的概念、进程之间的状态转换及其所带来的PCB内容 、组织的变化,理解进程与其PCB间的一一对应关系。 三、实验内容与要求 1)设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。 2)独立编写、调试程序。进程的数目、进程的状态模型(三状态、五状态、七状态或其它)以及PCB的组织形式可自行选择。 3)合理设计与进程PCB相对应的数据结构。PCB的内容要涵盖进程的基本信息、控制信息、资源需求及现场信息。 4)设计出可视性较好的界面,应能反映出进程状态的变化引起的对应PCB内容、组织结构的变化。 二、实验目的 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 三、实验内容与要求 通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对命中率的影响。页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。 计算并输出下属算法在不同内存容量下的命中率。  先进先出的算法(FIFO); 最近最少使用算法(LRU) 二、实验目的 死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。 三、实验内容与要求 设计有n个进程共享m个系统资源的系统,进程可动态的申请和释放资源,系统按各进程的申请动态的分配资源。 系统能显示各个进程申请和释放资源,以及系统动态分配资源的过程,便于用户观察和分析。 四、算法描述(含数据结构定义)或流程图 (一) 数据结构 1. 可利用资源向量Available ,它是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源的数目,其初始值是系统中所配置的该类全部可用资源数目。其数值随该类资源的分配和回收而动态地改变。如果Available(j)=k,标是系统中现有Rj类资源k个。 2. 最大需求矩阵Max,这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max(i,j)=k,表示进程i需要Rj类资源的最大数目为k。 3. 分配矩阵Allocation,这是一个n×m的矩阵,它定义了系统中的每类资源当前一分配到每一个进程的资源数。如果Allocation(i,j)=k,表示进程i当前已经分到Rj类资源的数目为k。Allocation i表示进程i的分配向量,有矩阵Allocation的第i行构成。 4. 需求矩阵Need,这是一个n×m的矩阵,用以表示每个进程还需要的各类资源的数目。如果Need(i,j)=k,表示进程i还需要Rj类资源k个,才能完成其任务。Need i表示进程i的需求向量,由矩阵Need的第i行构成。 上述三个矩阵间存在关系:Need(i,j)=Max(i,j)-Allocation(i,j)。 (二) 银行家算法 Request i 是进程Pi 的请求向量。Request i (j)=k表示进程Pi请求分配Rj类资源k个。当Pi发出资源请求后,系统按下述步骤进行检查: 1. 如果Request i ≤Need,则转向步骤2;否则,认为出错,因为它所请求的资源数已超过它当前的最大需求量。 2. 如果Request i ≤Available,则转向步骤3;否则,表示系统中尚无足够的资源满足Pi的申请,Pi必须等待。 3. 系统试探性地把资源分配给进程Pi,并修改下面数据结构中的数值: 二、实验目的 磁盘是高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出工作,在现代计算机系统中往往同时会有若干个要求访问磁盘的输入输出要求。系统可采用一种策略,尽可能按最佳次序执行访问磁盘的请求。由于磁盘访问时间主要受寻道时间T的影响,为此需要采用合适的寻道算法,以降低寻道时间。本实验要求模拟设计一个磁盘调度程序,观察调度程序的动态运行过程。通过实验来理解和掌握磁盘调度的职能。 三、实验内容与要求 分别模拟如下磁盘调度算法,对磁盘进行移臂操作:  先来先服务算法  最短寻道优先算法 1. 假设磁盘只有一个盘面,并且磁盘是可移动头磁盘。 2. 磁盘是可供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。当有进程在访问某个磁盘时,其它想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出请求而处于等待状态时,可用磁盘调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。为此设置“驱动调度”进程。 3. 由于磁盘与处理器是并行工作的,所以当磁盘在为一个进程服务时,占有处理器的其它进程可以提出使用磁盘(这里我们只要求访问磁道),即动态申请访问磁道,为此设置“接受请求”进程。 4. 为了模拟以上两个进程的执行,可以考虑使用随机数来确定二者的允许顺序,参考程序流程图。 5. “接受请求”进程建立一张“进程请求I/O”表,指出等待访问磁盘的进程要求访问的磁道,表的格式如下: 进程名 要求访问的磁道号 6. 磁盘调度的功能是查“请求I/O”表,当有等待访问的进程时,按磁盘调度算法从中选择一个等待访问的进程,按其指定的要求访问磁道。流程图中的“初始化”工作包括:初始化“请求I/O”表,设置当前移臂方向;当前磁道号。并且假设程序运行前“请求I/O”表中已有若干进程(4~8个)申请访问相应磁道。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值