Linux操作系统·进程管理

一、什么是进程

1.作业和进程的概念

Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。为了完成这些任务,系统上同时运行着多个进程,正在执行的一个或多个相关进程称为一个作业。

2.程序与进程的关系

程序
保存在硬盘、光盘等介质中的可执行代码和数据
是静态保存的代码

进程
在CPU及内存中运行的程序代码
是动态执行的代码
父、子进程:每个进程可以创建一个或多个进程

二、进程管理

1..查看进程信息

每当运行一个程序,都要启动一个进程。

ps命令
用途:显示正在执行的进程统计信息
格式:
常用:ps aux ps -elf
常用命令选项
a:显示当前终端下的所有进程信息
u:使用以用户为主的格式输出进程信息
x:显示当前用户在所有终端下的进程信息
-e:显示系统内的所有进程信息
-l:使用长格式显示进程信息
-f:使用完整的格式显示进程信息

[root@localhost ~]# ps aux
USER  PID %CPU %MEM VSZ RSS TTY STAT START TIME  COMMAND
root       1  0.0  0.3     2648   604 ?        S    Apr02     0:13   init [3]
root       2  0.0  0.0       0       0 ?        SN   Apr02    0:00   [ksoftirqd/0]
root       3  0.0  0.0       0       0 ?        S<   Apr02    0:19   [events/0]
root       4  0.0  0.0       0       0 ?        S<   Apr02    0:00   [khelper]
…… 

PID:该进程在系统中的数字ID号,在当前系统中是唯一的;

top命令
用途:查看动态的进程排名信息

[root@localhost ~]# top
top - 06:08:48 up 4 days,  6:57,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  60 total,   1 running,  59 sleeping,   0 stopped,   0 zombie
Cpu(s): 0.3% us,  0.7% sy, 0.0% ni, 97.4% id,  0.4% wa,  0.1% hi, 1.1% si
Mem:    191228k total,   171424k used,    19804k free,    19436k buffers
Swap:   265064k total,     1284k used,   263780k free,   120480k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM  TIME+  COMMAND6779 root      16   0  2536  832  668 R  3.8  0.4   0:00.04 top1 root      16   0  2648  604  520 S  0.0  0.3   0:13.54 init2 root      34   19     0    0    0 S  0.0  0.0   0:00.07 ksoftirqd/0
……

nice命令
是反映一个进程优先级状态的值,取值范围是-20至19,一共40个级别。
这个值越小,表示进程“优先级”越高,而值越大“优先级”越低。

renice命令
对一个正在运行的进程进行nice值的调整。

pgrep命令
用途:根据特定条件查询进程PID信息
常用命令选项:
-l:列出进程的名称
-U:根据进程所属的用户名进行查找
-t:根据进程所在的终端进行查找

[root@localhost ~]# pgrep "init"
1
[root@localhost ~]# pgrep -l "log"
2538 syslogd
2541 klogd
3221 login
[root@localhost ~]# pgrep -l -U teacher -t tty1
27483 bash
27584 vim

pstree命令
用途:以树型结构显示各进程间的关系
常用命令选项:
-p:列出进程的PID号
-u:列出进程对应的用户名
-a:列出进程对应的完整命令

2..前台、后台作业

作业可以在前台,也可以在后台运行,在同一时间只能有一个作业在前台运行。前台作业是指正对它进行交互操作的作业,它从键盘接受输入,并将输出送往屏幕。另一方面,后台作业不接受中断的输入。它们在运行时不需要交互操作,只是默默运行。

进程的前后台调度
Ctrl+Z组合键:将当前进程挂起,即调入后台并停止执行
jobs命令:查看处于后台的任务列表
fg命令:将处于后台的进程恢复到前台运行,需指定任务序号

[root@localhost ~]# jobs
[1]-   Stopped                 cp /dev/cdrom mycd.iso 
[2]+  Stopped                 top
[root@localhost ~]# fg 1

3..启动进程

在Linux系统中每个进程都具有一个进程号,用于系统识别和调度进程。启动一个进程有两个主要途径:手工启动和调度启动,后者是事先进行设置,根据用户要求自行启动。

手工运行

由用户输入命令,直接启动一个进程便是手工启动进程。但手工启动进程又可以分为很多种,根据启动的进程类型不同、性质不同,实际结果也不一样。前台启动是手工启动一个进程的最常用的方式。一般地,用户输入一个命令就已经启动了一个进程,而且是一个前台的进程。
输入yes命令如下:

$ yes

该命令将会打印出一连串的y。用户可以通过输入中断键(通常为Ctrl+C)来中断这个作业。在输入命令以后立即使用“ps”命令,可以查看进程状态。如果看不到进程状态,有可能是某些进程结束太快,使用“ps”查看时该进程已经执行结束了。上例中若希望yes命令继续运行下去,但同时也希望Shell提示符仍回到屏幕上去做其他的事情。这时可以将yes放到后台运行。这样,就能够在不需要任何交互操作的情况下使它继续运行了。
下面将yes的输出送给/dev/null,然后让这个作业在后台运行。将一个作业放到后台运行的一种方法是在命令后面加“&”字符,输入命令以后,出现一个数字,这个数字就是该进程的作业号和进程号,也称为PID。代码如下:

$yes > /dev/null &
[1] 164

这时,用户可以看到Shell的提示符又回到屏幕上,用户可以继续其他工作,
现在,yes进程正在后台运行,并不断把一连串y字符送给/dev/null。可使用jobs命令查看这个作业的状态,或者用ps命令来查看进程的状态

$ jobs
[1] + running yes > /dev/null &

调度启动
使用at命令,设置在某个特定的时间,执行一次任务
使用crontab命令,设置按固定的周期(如每天、每周等)重复执行预先计划好的任务

4.撤销作业

可以使用kill命令来撤销某个作业或终止某个进程。kill命令用作业号或PID作为参数来指定要撤销的作业。当使用作业号来标识作业时,在作业号前面要加“%”。若该作业的作业号为1,可用下面的命

$ kill  %1

将会撤销这个作业。撤销了这个作业后,可以再用jobs命令来检查一下。

$ jobs
[1] + 已终止 yes > /dev/nu11

结果证实这个作业已经被撤销。如果再次使用jobs命令,屏幕上将不会显示任何信息。
还可以使用进程标识号(PID)来终止该进程在此,PID为164,所以命令:

$ kill 164

与命令:

$ kill %1

是等价的。
当使用进程标识号来指定作业时,进程标识号之前不加“%”。

Ctrl+C组合键:中断正在执行的命令
kill、killall命令:
kill用于终止指定PID号的进程
killall用于终止指定名称的所有进程
-9 选项用于强制终止

[root@localhost ~]# pgrep -l "portmap"
2869  portmap
[root@localhost ~]# kill  -9  2869
[root@localhost ~]# killall -9 vim
[1]-  已杀死               /usr/bin/vim file1
[2]-  已杀死               /usr/bin/vim file2

pkill命令
用途:根据特定条件终止相应的进程
常用命令选项:
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程

[root@localhost ~]# w | grep -v "root"
14:10:10 up  6:08,  4 users,  load average: 0.00, 0.01, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
teacher  tty1     -                14:04    5:34   0.16s  0.16s -bash
hackli   pts/1    173.17.17.174    14:05    4:32   0.17s  0.17s -bash 
[root@localhost ~]# pkill -9 -t pts/1
[root@localhost ~]# w | grep -v "root"14:12:22 up  6:10,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
teacher  tty1     -                14:04    7:46   0.16s  0.16s -bash

5.中止作业和重新启动作业
还有另外一种方法用来将作业放到后台运行。首先正常地在前台启动一个作业,然后暂时中止它,最后在后台重新启动它。
例如在前台启动yes进程,命令如下:

$ yes > /dev/null

当然,由于yes是在前台运行的,用户不能在屏幕上看到Shell的提示符了。现在,将这个作业挂起,而不是将其用Ctrl+C中断。挂起一个作业将不会撤销这个作业,而只是将这个作业暂时中止了,直到用户重新启动它。
用户可以通过键入挂起键(Ctrl+Z)来挂起这个作业。

$ yes > /dev/null
ctrl+Z
[1] + stopped yes > /dev/null

当挂起一个作业后,它只是不运行了。这时,这个作业不占用CPU时间。用户可以重新启动这个作业,使这个作业重新运行,就像什么都没有发生过一样。作业将在被中止的地方继续执行。
使用fg命令,可以在前台重新启动一个作业。

$ fg
yes > /dev/nul1

Shell将把命令的名字重新显示到屏幕上,使用户知道目前哪个作业在前台执行。用户可以再次使用Ctrl+Z中止这个作业,改成用命令bg将这个作业放入后台执行。这时,命令将在后台运行,就像在上面用“&”来启动这个命令一样。

$ bg
[1] + yes > /dev/null &

如何再次中止这个作业呢?因为作业是在后台运行,使用Ctrl+Z已经没有什么用了。要中止该作业,首先应用fg命令将这个作业放到前台,然后再中止它。可用fg命令将已经中止的作业或后台运行的作业放到前台来运行。
后台作业和被中止的作业有很大的不同。被中止的作业没有运行,它不再使用CPU时间,并且它也不做任何工作。这个作业仍然占用系统的内存,但是这些内存可能被交换到硬盘上。而后台作业则是在运行、使用内存,并且与用户的其他作业同时进行的一些任务。如果一个后台作业有向显示终端的标准输出,那么该作业在运行时可能会向用户终端显示一些信息。这样的显示有时会干扰用户的前台作业。例如,如果用户使用命令:

$ yes &

而没有将输出的重定向到/dev/nul,y串会被显示到用户屏幕上。为了终止这无穷无尽的“y”,用户只能使用fg命令把作业放在前台,并使用Ctrl+C终止它的运行。
另外注意,fg和bg命令的缺省作业是最近被中止的作业。当用户用jobs命令列出时,作业号后面的“+”号表明该作业是最近被中止的作业。如果用户同时运行多个作业,fg或bg命令可以使用作业ID作为参数来指定作业放到前台还是后台。例如:

$ fg %2 #作业2被放到前台执行
$ fg %3 #作业3被放到前台执行
$ bg %4 #作业4被放到后台执行

在fg或bg命令中不能使用进程标识符。另外,使用单独的作业号也可以将作业放到前台。

6.作业的顺序执行
用户可以在一个命令行同时输入两个或更多的命令来使作业顺序执行。这时,作业之间用分号(;)或与号(&)分开。Linux系统将按照命令行的顺序来执行这些作业,并将所有的输出结果在屏幕上显示出来。

$ cd /;pwd;ls -F

该命令将顺序执行以下三个命令
1)cd /命令将使用户的工作目录变为根目录。
2)pwd命令显示当前工作目录的全路径
3)列出当前工作目录中的内容
进程的启动、中止、撤销与作业基本相同。

三、系统监视工具

1.桌面环境下监视系统
通过系统监视器可以实现对CPU、硬盘、内存和交换分区的实时监视

四、计划任务

1. at命令
在指定的日期、时间点自动执行预先设置的一些命令操作,属于一次性计划任务
服务脚本名称:/etc/init.d/atd
设置格式:at  [HH:MM]  [yyyy-mm-dd]

[root@localhost ~]# service atd start
启动 atd:                                               [确定]
[root@localhost ~]# at 23:45
at> shutdown -h now
at> <EOT>
job 1 at 2009-09-14 23:45
[root@localhost ~]# atq
1       2009-09-14 23:45 a root

2.crontab命令
按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作,属于周期性计划任务
服务脚本名称:/etc/init.d/crond
主要设置文件:
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

cron让使用者在固定时间执行指定的程序
cron调度与crond进程、crontab命令和crontab配置文件有关。

管理cron计划任务
编辑计划任务:crontab  -e  [-u  用户名]
查看计划任务:crontab  -l  [-u  用户名]
删除计划任务:crontab  -r  [-u  用户名]

crontab任务的配置格式
时间数值的特殊表示方法
* 表示该范围内的任意时间
,  表示间隔的多个不连续时间点
-  表示一个连续的时间范围
/ 指定间隔的时间频率

示例
0  17  *  *  1-5 周一到周五每天17:00
30  8  *  *  1,3,5 每周一、三、五的8点30分
0  8-18/2  *  *  * 8点到18点之间每隔2小时
0  *  */3  *  *  每隔3天

示例1(root用户):
每天早上7:50自动开启sshd服务,22点50时关闭
每隔5天清空一次FTP服务器公共目录/var/ftp/pub
每周六的7:30时,重新启动httpd服务
每周一、三、五的17:30时,打包备份/etc/httpd目录

[root@localhost root]# crontab -l
50 7 * * *  /sbin/service sshd start
50 22 * * *  /sbin/service sshd stop
0 * */5 * *  /bin/rm -rf /var/ftp/pub/*
30 7 * * 6  /sbin/service httpd restart
30 17 * * 1,3,5  /bin/tar jcvf httpdconf.tar.bz2 /etc/httpd

示例2(jerry用户):
每周日晚上23:55时将“/etc/passwd”文件的内容复制到宿主目录中,保存为pwd.txt文件
 

[root@localhost root]# crontab -l -u jerry
55 23 * * 7  /bin/cp /etc/passwd /home/jerry/pwd.txt
[root@localhost root]# crontab -r -u jerry
[root@localhost root]# crontab -l -u jerry
no crontab for jerry

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android binder死亡通知机制

在Andorid 的binder系统中&#xff0c;当Bn端由于种种原因死亡时&#xff0c;需要通知Bp端&#xff0c;Bp端感知Bn端死亡后&#xff0c;做相应的处理。 使用 Bp需要先注册一个死亡通知&#xff0c;当Bn端死亡时&#xff0c;回调到Bp端。 1&#xff0c;java代码注册死亡通知 …

【webrtc】MessageHandler 9: 基于线程的消息处理:执行Port销毁自己

Port::Port 构造的时候,就触发了一个异步操作,但是这个操作是要在 thread 里执行的,因此要通过post 消息 MSG_DESTROY_IF_DEAD 到thread跑:port的创建并米有要求在thread中 但是port的析构却在thread里 这是为啥呢?

豆瓣9.7,这部Java神作第3版重磅上市!

Java 程序员们开年就有重磅好消息&#xff0c;《Effective Java 中文版&#xff08;原书第 3 版&#xff09;》要上市啦&#xff01; 该书的第1版出版于 2001 年&#xff0c;当时就在业界流传开来&#xff0c;受到广泛赞誉。时至今日&#xff0c;已热销近20年&#xff0c;本书第…

三维SDMTSP:GWO灰狼优化算法求解三维单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)

一、单仓库多旅行商问题 多旅行商问题&#xff08;Multiple Traveling Salesman Problem, MTSP&#xff09;是著名的旅行商问题&#xff08;Traveling Salesman Problem, TSP&#xff09;的延伸&#xff0c;多旅行商问题定义为&#xff1a;给定一个&#x1d45b;座城市的城市集…

CST Studio初级教程 五

本课程将实例讲解CST 3D建模。CST 3D 建模有三个途径&#xff1a;一种方法是用Brick、Sphere、Cone、Torus、Cylinder、Bond Wire指令绘制实体。第二种方法是用Extrude Face、Rotate Face、loft在已有模型基础上生成实体。第三种方法是&#xff0c;先用2D绘图指令绘制Curves&am…

Apache POI 在java中处理excel

介绍: Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下&#xff0c;POI 都是用于操作 Excel 文件。 如何使用: 1.maven坐标引入 <depend…

Aker(安碁科技)晶振产品应用和选型

一、石英晶体振荡器简介 在电子电路系统中&#xff0c;特定的动作需要严格按照一定的顺序进行&#xff0c;以确保数据被正确处理和操作&#xff0c;时钟信号就成了系统工作的重要引导者。而且在多模块复杂电路系统中&#xff0c;为了确保不同功能模块能协调一致地工作&#xf…

你用过最好用的AI工具有哪些

一&#xff1a;介绍 随着科技的飞速发展&#xff0c;AI技术已经深入到我们生活的每一个角落&#xff0c;为我们提供了前所未有的便利和可能性。在众多AI工具中&#xff0c;有几种特别受到人们的喜爱&#xff0c;并且在各自的领域中产生了深远的影响。 1、AI绘画工具 改图鸭AI绘…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(七)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 14 节&#xff09; P14《13.ArkUI组件-自定义组件》 将可变部分封装成组件的成员变量&#xff1a; 1、首先给标题添加两个图标&am…

用Docker 创建并运行一个MySQL容器

可以在DockerHub官网上荡:mysql - Official Image | Docker Hub 指令是:docker pull mysql; 因为文件比较大可能时间比较长&#xff0c;我是跟着黑马的课走的 课程提供的有文件&#xff0c;我就用已有的资源了。 在tmp目录里放入mysql.tar包 然后cd进去 输入指令:docker lo…

上位机开发PyQt(五)【Qt Designer】

PyQt5提供了一个可视化图形工具Qt Designer&#xff0c;文件名为designer.exe。如果在电脑上找不到&#xff0c;可以用如下命令进行安装&#xff1a; pip install PyQt5-tools 安装完毕后&#xff0c;可在如下目录找到此工具软件&#xff1a; %LOCALAPPDATA%\Programs\Python\…

设计模式之监听器模式ListenerPattern(三)

一、介绍 监听器模式是一种软件设计模式&#xff0c;在对象的状态发生改变时&#xff0c;允许依赖它的其他对象获得通知。在Java中&#xff0c;可以使用接口和回调机制来实现监听器模式。 二、代码实例 1、事件Event类 package com.xu.demo.listener;// 事件类 public class…

前端开发框架uni-app

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl uni-app概述 uni-app起源于跨平台应用开发的需求增长。在过去&#xff0c;为不同的平台&#xff08;如iOS、Android、各种小程序等&#xff09;开发应用需要分别编写和维护…

C++必修:类与对象(二)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. 构造函数 1.1. 定义 构造函数是一个特殊的成员函数&#xff0c;名字与类名相…

【GitHub】github学生认证,在vscode中使用copilot的教程

github学生认证并使用copilot教程 写在最前面一.注册github账号1.1、注册1.2、完善你的profile 二、Github 学生认证注意事项&#xff1a;不完善的说明 三、Copilot四、在 Visual Studio Code 中安装 GitHub Copilot 扩展4.1 安装 Copilot 插件4.2 配置 Copilot 插件&#xff0…

【C++】学习笔记——string_2

文章目录 六、string类2. 反向迭代器const迭代器 string类对象的容量操作&#xff08;补&#xff09;size() 3. string类的元素访问4. string类的修改 未完待续 结合文档食用~ 六、string类 2. 反向迭代器 一般来说&#xff0c;迭代器都是正向的遍历容器&#xff0c;虽然可以…

开源协议与商业许可:选择与遵循

文章目录 一、开源协议1.1 MIT许可证&#xff08;MIT License&#xff09;1.2 BSD许可证&#xff08;BSD License&#xff09;1.3 Apache许可证 2.0&#xff08;Apache License 2.0&#xff09;1.4 GNU宽松通用公共许可证&#xff08;GNU Lesser General Public License&#x…

# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(3)

从浅入深 学习 SpringCloud 微服务架构&#xff08;七&#xff09;Hystrix&#xff08;3&#xff09; 一、hystrix&#xff1a;通过 Actuator 获取 hystrix 的监控数据 1、Hystrix 的监控平台介绍&#xff1a; 1&#xff09;Hystrix 除了实现容错功能&#xff0c;Hystrix 还…

spring boot运行过程中动态加载Controller

1.被加载的jar代码 package com.dl;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class App {public static void main(String[] args) {SpringApplication.run(A…

【MySQL精炼宝库】深度解析索引 | 事务

目录 一、索引 1.1 索引(index)概念&#xff1a; 1.2 索引的作用&#xff1a; 1.3 索引的缺点&#xff1a; 1.4 索引的使用场景&#xff1a; 1.5 索引的使用&#xff1a; 1.6 面试题:索引底层的数据结构&#xff08;核心内容&#xff09;&#xff1a; 1.7 索引列查询(主…