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.rhkb.cn/news/317081.html

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

相关文章

数据库基础--MySQL简介以及基础MySQL操作

数据库概述 数据库&#xff08;DATABASE&#xff0c;简称DB&#xff09; 定义:是按照数据结构来组织、存储和管理数据的仓库.保存有组织的数据的容器(通常是一个文件或一组文件) 数据库管理系统(Database Management System,简称DBMS) 专门用于管理数据库的计算机系统软件;…

【补充】图神经网络前传——图论

本文作为对图神经网络的补充。主要内容是看书。 仅包含Introduction to Graph Theory前五章以及其他相关书籍的相关内容&#xff08;如果后续在实践中发现前五章不够&#xff0c;会补上剩余内容&#xff09; 引入 什么是图&#xff1f; 如上图所示的路线图和电路图都可以使用…

【Spring Cloud】服务容错中间件Sentinel入门

文章目录 什么是 SentinelSentinel 具有以下特征&#xff1a;Sentinel分为两个部分: 安装 Sentinel 控制台下载jar包&#xff0c;解压到文件夹启动控制台访问了解控制台的使用原理 微服务集成 Sentinel添加依赖增加配置测试用例编写启动程序 实现接口限流总结 欢迎来到阿Q社区 …

【介绍下Unity编辑器扩展】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【docker】Spring Boot3.x 打包 Docker容器

Docker化Spring Boot应用 创建文件夹 demo mkdir democd demo创建Dockerfile # 两个 openjdk 二选一 #FROM openjdk:17-jre-alpineFROM eclipse-temurin:17MAINTAINER chengxuyuanshitang <chengxuyuanshitangXX.com>RUN mkdir -p /workspace/java/demoCOPY demo.ja…

Android 11 裁剪系统显示区域(适配异形屏)

概述 在显示技术中&#xff0c;"OverScan"&#xff08;超扫描&#xff09;是一种调整显示图像边界的技术。通常情况下&#xff0c;OverScan 会在显示屏的边缘周围裁剪一小部分图像。这种裁剪是为了确保显示内容在屏幕上的完整可见性&#xff0c;尤其是在老式电视或投…

C++入门基础(二)

目录 缺省参数缺省参数概念缺省参数分类全缺省参数半缺省参数声明与定义分离 缺省参数的应用 函数重载函数重载概念例子1 参数类型不同例子2 参数的个数不同例子3 参数的顺序不同 C支持函数重载的原理--名字修饰(name Mangling) 感谢各位大佬对我的支持,如果我的文章对你有用,欢…

Visual Studio导入libtorch(Cuda版)

Visual Studio导入libtorch&#xff08;Cuda版&#xff09; 一、安装 官网&#xff1a;https://pytorch.org/get-started/locally/ 相应地选择并下载 二、环境变量配置 解压zip&#xff0c;得到libtorch文件夹&#xff0c;将libtorch\lib和libtorch\bin对应路径添加到系统环…

使 Elasticsearch 和 Lucene 成为最佳向量数据库:速度提高 8 倍,效率提高 32 倍

作者&#xff1a;来自 Elastic Mayya Sharipova, Benjamin Trent, Jim Ferenczi Elasticsearch 和 Lucene 成绩单&#xff1a;值得注意的速度和效率投资 我们 Elastic 的使命是将 Apache Lucene 打造成最佳的向量数据库&#xff0c;并继续提升 Elasticsearch 作为搜索和 RAG&a…

【JVM】简述类加载器及双亲委派机制

双亲委派模型&#xff0c;是加载class文件的一种机制。在介绍双亲委派模型之前&#xff0c;我需要先介绍几种类加载器&#xff08;Class Loader&#xff09;。 1&#xff0c;类加载器 Bootstrap&#xff0c;加载lib/rt.jar&#xff0c;charset.jar等中的核心类&#xff0c;由…

JWT是什么?如何使用?

JWT是什么&#xff1f;如何使用&#xff1f; 前言什么是JWT&#xff1f;概念工作方式JWT的组成HeaderPayloadSignatrue 实战引入依赖自定义注解定义实体类定义一个JWT工具类业务校验并生成token定义拦截器配置拦截器定义接口方法并添加注解开始验证 使用场景注意事项 JWT与传统…

ASR语音转录Prompt优化

ASR语音转录Prompt优化 一、前言 在ASR转录的时候&#xff0c;我们能很明显的感受到有时候语音识别不是很准确&#xff0c;这过程中常见的文本错误主要可以归纳为以下几类&#xff1a; 同音错误&#xff08;Homophone Errors&#xff09; 同音错误发生在不同词语发音相似或相…

用Excel做一个功能完备的仓库管理系统

1 基本设计思路 用到的Excel技术&#xff1a;sumif, vlookup, 表格(table)。基本思路&#xff1a;在有基础的商品、仓库等信息的情况下&#xff0c;对商品的每一个操作都有对应的单据&#xff0c;然后再汇总统计。标识&#xff1a;为了在不同的维度统计数量&#xff0c;各单据…

谷粒商城实战(020 RabbitMQ-消息确认)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第258p-第p261的内容 消息确认 生产者 publishers 消费者 consumers 设置配置类 调用api 控制台 抵达brocker 代理 新版本ReturnCallbac…

matlab学习005-利用matlab设计滤波器

目录 一&#xff0c;含有多个频率成分的三角信号 1&#xff0c;以采样频率fs20KHz对信号采样&#xff0c; 画出信号的波形&#xff1b; 1&#xff09;前期基础 2&#xff09;波形图 3&#xff09;代码 2&#xff0c;选取合适的采样点数&#xff0c;利用DFT分析信号的…

Baidu Comate:“AI +”让软件研发更高效更安全

4月27日&#xff0c;百度副总裁陈洋出席由全国工商联主办的第64届德胜门大讲堂&#xff0c;并发表了《深化大模型技术创新与应用落地&#xff0c;护航大模型产业平稳健康发展》主题演讲。陈洋表示&#xff0c;“人工智能”成为催生新质生产力的重要引擎&#xff0c;对于企业而言…

【禅道客户案例】同方智慧能源数智化转型新实践 禅道助力前行

同方智慧能源是同方股份有限公司的骨干企业。依托中核集团、清华大学的科技优势&#xff0c;坚持技术和资源双核驱动&#xff0c;基于30多年行业积淀&#xff0c;面向建筑、交通、工业、北方供热、数据中心等主要用能场景提供设计咨询、产品技术、投资建设、运营服务&#xff0…

四、线段、矩形、圆、椭圆、自定义多边形、边缘轮廓和文本绘制(OpenCvSharp)

功能实现&#xff1a; 对指定图片上进行绘制线段、矩形、圆、椭圆、自定义多边形、边缘轮廓以及自定义文本 一、布局 用到了一个pictureBox和八个button 二、引入命名空间 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.F…

如何有效的将丢失的mfc140u.dll修复,几种mfc140u.dll丢失的解决方法

当你在运行某个程序或应用程序时&#xff0c;突然遭遇到mfc140u.dll丢失的错误提示&#xff0c;这可能会对你的电脑运行产生一些不利影响。但是&#xff0c;不要担心&#xff0c;以下是一套详细的mfc140u.dll丢失的解决方法。 mfc140u.dll缺失问题的详细解决步骤 步骤1&#x…

VTK —— 二、教程五 - 通过鼠标事件与渲染交互(附完整源码)

代码效果 本代码编译运行均在如下链接文章生成的库执行成功&#xff0c;若无VTK库则请先参考如下链接编译vtk源码&#xff1a; VTK —— 一、Windows10下编译VTK源码&#xff0c;并用Vs2017代码测试&#xff08;附编译流程、附编译好的库、vtk测试源码&#xff09; 教程描述 本…