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.hqwc.cn/news/661155.html

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

相关文章

RTMP 直播推流 Demo(一)—— 项目配置与视频预览

音视频编解码系列目录&#xff1a; Android 音视频基础知识 Android 音视频播放器 Demo&#xff08;一&#xff09;—— 视频解码与渲染 Android 音视频播放器 Demo&#xff08;二&#xff09;—— 音频解码与音视频同步 RTMP 直播推流 Demo&#xff08;一&#xff09;—— 项目…

es环境安装及php对接使用

Elasticsearch Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java语言开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是一种流行的…

Notes for the missing semester. Useful and basic knowledge about Linux.

The Shell Contents The first course is to introduce some simple commands. I’ll list some commands that I’m not familiar with: # --silent means dont give log info, # --head means we only want the http head. curl --head --silent bing.com.cn# cut --deli…

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

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

nginx下载安装配置(含ssl)

下载安装环节 wget https://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf xxx.tar.gz yum -y install pcre-devel openssl openssl-devel ./configure --prefix/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream make & make i…

【T1】T1飞跃专业版,点击财务报表没有任何反应。

【问题描述】 在T1飞跃专业版软件中&#xff0c; 点击标准财务–财务报表–资产负债表&#xff0c;没有任何反应。 【解决方法】 退出客户端后&#xff0c;打开客户端所在目录&#xff0c; 找到【UjRegSys.bat】文件&#xff0c;双击运行&#xff08;管理员身份&#xff09;后…

【HMGD】使用CubeMx配置GD32F303系列单片机进行DMA ADC

原理图查看 查原理图可以看到GD32F103C8T6的官方开发板GD32303C-START-V1.0的PA1没有接任何东西 使用PA1作为ADC端口 CubeMX配置ADC和时钟 配置ADC通道 启用循环模式 配置此通道ADC分频 配置ADC DMA为循环模式 配置时钟 可根据手册配置最大HZ GD32F303最高频率设定 生成…

Oracle系统参数调整【数据库实例优化系列一】

Oracle实例是:内存组件和相关的后台进程组成。这些内存组件提高了数据库的运行,而后台进程负责管理系统和内存组件。 一、SGA和实例优化 Oracle的SGA是指的系统全局区。sga是数据库运行期间使用的一段公有内存,即数据库用户都可以访问这段内存,包括: 共享池、重做日志缓冲…

第2节:UIOTOS前端零代码应用 蓝图连线 信号值变化小示例02

目标 通过连线&#xff0c;实现信号值随机变化。 最终效果 实现过程 步骤1&#xff1a;接11节&#xff0c;选中底板设置其背景颜色 步骤2&#xff1a;拖入普通按钮V2组件&#xff0c;设置“text”值为“1”&#xff0c;并做form绑定 步骤3&#xff1a;选中按钮对输入框进行交…

宠物领养|基于SprinBoot+vue的宠物领养管理系统(源码+数据库+文档)

宠物领养目录 基于Spring Boot的宠物领养系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1前台 1.1 宠物领养 1.2 宠物认领 1.3 教学视频 2后台 2.1宠物领养管理 2.2 宠物领养审核管理 2.3 宠物认领管理 2.4 宠物认领审核管理 2.5 教学视频管理 四、…

『FPGA通信接口』DDR(3)DDR3颗粒读写测试

文章目录 前言1.配套工程简介2.测试内容与策略3. 测试程序分析4.程序结果分析5.一个IP控制两颗DDR36.传送门 前言 以四颗MT41K512M16HA-125AIT颗粒为例&#xff0c;介绍如何在一块新制板卡上做关于DDR3的器件测试。前面两篇介绍了什么是DDR&#xff0c;并介绍了xilinx给出的FPG…

使用RTSP将笔记本摄像头的视频流推到开发板

一、在Windows端安装ffmpeg 1. 下载ffmpeg:下载ffmpeg 解压ffmpeg-master-latest-win64-gpl.zip bin 目录下是 dll 动态库 , 以及 可执行文件 ;将 3 33 个可执行文件拷贝到 " C:\Windows " 目录下 ,将所有的 " .dll " 动态库拷贝到 " C:\Windows\Sy…