Linux学习-进程管理




目录

  • 父进程与子进程
  • 服务
  • 工作管理(& | jobs | fg | bg | kill)
  • ps命令
  • Priority和nice优先级


父进程与子进程

子进程是父进程衍生出来的程序。举个大家经常使用的例子,我们每次登陆的shell,会触发一个进程,我们都是在这个shell下输入命令进行工作的,其实呢,你输入的命令也会触发一个新的进程,这个新的进程就是子进程,而一开始登陆的shell进程则为父进程。我们做一个小实验,我们在当前登陆shell下再登陆一个新的shell,然后输入一个命令,查看进程的状态信息

PID是该进程的识别码,PPID是父进程的识别码。我们发现第一个bash的PID和第二个bash的PPID都是2446,ping命令的PPID和第二个bash的PID都是2660,说明bash下输入的命令都是当前bash的进程所产生的嘛。



服务(常驻内存)

在系统引导过程中就启动的进程,我们称之为守护进程,也叫服务,并且这类进程会持续的进行,提供系统和网络所必须的功能。



工作管理

通常在当前bash下执行一个任务,必须等待这个任务执行完毕后才能输入命令执行下一个任务,现在我们要进行文档复制、资料查询、软件安装等等多个任务同时工作,这就要用到工作管理的知识。

将任务转到后台(&)

直接在执行任务的命令后边加&,然后我们可以输入命令执行另一个任务从而实现多任务执行。例如,我们将/etc下的文件和目录进行备份,同时不需要等待

[[email protected] ~]# tar -zpc -f /app/etc.tar.gz /etc/* &
[1] 2948    # 2948代表PID
[[email protected] ~]# tar: Removing leading `/' from member names
# 一段时间之后,出现如下信息代表该任务完成
[1]+  Done                    tar -zpc -f /app/etc.tar.gz /etc/*

这里会有一个问题,如果对于那些会有显示结果的命令,例如ping命令,使用&之后,终端会一直显示ping命令的返回结果,这时候因为已经是后台进程,用ctrl+c也不起作用,我们怎么办呢,我们可以用数据重定向,例如:

ping 172.18.0.1 > /tmp/txt 2>&1 &

查看后台工作状态(jobs)

如果想知道有多少进程在后台工作,可以利用jobs命令查看,下图为我的系统现在后台工作的进程,显示结果表示了后天进程的工作状态等信息,注意前边的+ -号,他们具有一定的含义,他们代表fg取用的顺序。

jobs -l  # 列出后台进程的详细信息,包括PID

-r  # 仅列出正在运行的后台进程

-s  # 仅列出暂停的后台进程

将后台进程转为前台进程(fg)

我们想让后台进程转到前台来运行,可以使用fg命令。

fg          # 默认将jobs命令显示结果中带 + 的转到前台

-     # 将带 - 的转到前台

%NUM   # 将jobs显示结果中指定的数字的进程转到前台

后台进程Stopped转为Running(bg)

下图中,我输入命令 /bin/ping 172.18.0.1 > /tmp/txt ,回车之后按下ctrl+z暂停该命令, ping命令的进程处于Stopped状态,使用bg之后,变为Running状态。

bg          # 针对默认将jobs命令显示结果中带 + 的进程

-     # 针对带 - 的进程

%NUM   # 针对jobs显示结果中指定的数字的进程

杀死后台进程(kill)

kill命令直接将后台进程粗暴地终止移除,不够这个命令有点特别,需要指定讯号来进行处理,我们先来看一下kill命令的用法:

kill -l    # 查看能够使用的signal,之后可以man 7 signal查看具体的效果

kill -signal %NUM | PID    # kill命令的格式,%NUM为jobs命令显示结果中的第一列数字

先介绍几种常用的signal

kill -1    # 重新读取一次配置参数的文件

kill -2    # 等同于ctrl+c

kill -9    # 强制删除一个进程,例如,对于vim编辑文件file,不会主动删除.file.swp

kill -15   # 正常终止一个进程,例如,对于vim,主动删除.file.swp



ps命令

ps    显示进程的运行状况

ps -l    # 仅显示当前bash下的进程状况

ps -lA   # 显示系统所有进程的信息,每一列字段代表的意义如下

F 进程的旗标(flag),为总结权限,4代表权限为root,1代表该子程序仅进行了复制
S 运行状态(stat),R=>运行,S=>睡眠,D=>堵塞,T=>停止状态,Z=>僵尸状态,已经终止但是无法移除内存
UID/PID/PPID 进程的发起人/进程号/父进程号
C CPU使用率,单位百分比
PRI/NI priority/nice优先级
ADDR/SZ/WCHAN ADDR代表进程在内存的那个部分,- 代表正在运行状态;SZ代表进程所占内存大小;WCHAN代表进程是否在运行,- 表示正在运行
TTY 登陆者的终端机位置,若为远程登录则为pts/n
TIME CPU运行该进程所费的时间
CMD 该进程是什么指令触发的

ps aux    # 不带-,显示系统所有的进程信息,每一列字段代表的意义如下

USER 进程的发起人
PID 进程号
%CPU 进程占用CPU百分比
%MEM 进程占用物理内存百分比
VSZ/RSS 进程占用虚拟内存的大小/进程占用的固定内存的大小,可以理解为页的数量
TTY
控制终端的ID,?代表与终端无关的进程,tty1-tty6为本机登录终端,pts/n为远程登录终端

STAT 进程状态
START/TIME 进程启动的时间/进程实际占用CPU的时间
COMMAND 触发进程的指令,如果后边跟了<defunct>,表示这是一个僵尸进程

ps axjf    # 同样不带 - ,进程之间具有相关性,该命令可以用类似程序树的形式显示进程信息

看图中一段的显示内容,我们可以看出,当前我是用sshd提供远程网络服务远程登录主机,该程序(父进程)提供一个bash环境(子进程),我在这个bash环境(父进程)下输入命令ps axjf触发了一个新的进程(子进程)。



Priority和nice优先级

linux会给予进程一个执行优先级priority(PRI),值越低优先级越高,PRI是系统核心动态控制调整,用户无法进行更改,那么我们如果想调整进程的优先级,而PRI又不能调整,我们引进了nice(NI)来使得用户可以手动修改进程的运行优先级别。

nice值的取值范围为-20--19,但是nice值的调整对用户也有限制,root可以随意调整自己和其他用户的nice值;普通用户只能调整自己的nece值,并且调整范围为0--19,防止nice为负值时抢占资源,同时nice值只能越调越高,不能降低nice值,PRI和NI具有一定的相关性:

PRI(new)=PRI(old)+NI

需要注意的是,从关系式来看,虽然NI可以影响进程的优先级,但是进程的优先级最终还要经过系统核心决定,所有我们不能简单的理解PRI+NI。

nice    # 对新建立的进程设定nice值

格式:nice -n NUM COMMAND     # NUM范围为-20--19

我们对vim命令设置nice值为5,原本预设的PRI值为bash的PRI(80),现在变为了85

renice    # 重新调整已存在进程的nice值

格式:renice NUM PID    # NUM范围为-20--19,如果超出这个范围,则自动调整为最近的-20或19

先查看进程bash的PRI和NI等信息,然后输入renice命令修改bash进程的NI,修改完之后发现PRI和NI发生变化,同时我们也发现子进程也继承了父进程的PRI和NI。

原文地址:http://blog.51cto.com/13570193/2086163

时间: 2024-10-28 20:16:04

Linux学习-进程管理的相关文章

linux系统-进程管理-计划任务

linux系统-进程管理-计划任务 一 计划任务命令 1 at 某一时刻执行任务 2 batch 在系统负载不重的时候执行 3 cron 周期性执行 二 at命令及使用 1 at [-f文件名]时间 2 at [-d删除任务] 3 at [-l查看任务] 4 绝对计时法:hh:mm MM/DD/YY at 17:30 4/18/15 5 交互方式:at 9:00 6 使用命令文件的方式:生成文件at.script 使用at命令 at -f at.srcipt 9:00 4/18/15 or at

linux内核——进程管理

在讲进程之前先说一下进程的堆栈的吧: 1.进程的堆栈 内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈.每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间.当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈:当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈. 2.进程用户栈和内核栈的切换 当进程因为中断或者系统调用而陷入内核态之行时,进程所使用的堆栈也要从用户栈转到内核栈. 进程陷

linux学习—权限管理

用户.组和权限(一)--为了让每个用户具有较安全的管理机制,文件的权限管理是很重要的.Linux通常将文件的访问方式分为三个类别(owner/group/other),并且具有Read/Write/eXecute等的权限. 目录 用户 用户组 安全上下文 组的类别 passwd,shadow,group,gshadow文件 useradd,userdel,groupadd,groupdel命令 passwd,usermod,gpasswd,groupmod命令 groupmems,newgrp,

Linux之进程管理及Shell脚本

使用!来调用过往命令 !! 重复执行上一条指令 !a 重复执行上一条以a为首的指令 !nubmer 重复执行上一条在history表中记录号码为number的指令 !-number重复执行前第number条指令 ailas abc='cd xxxxxxxxxxx/xxxxxxxx/xxxxxxxxxxxxx' unalias abc " "将一串字符当成字符串来看,可以转译特殊字符 ' '将一串字符当成字符串来看,无法转译特殊字符 ·能够返回命令执行的结果 echo `uname -a

Linux基础--进程管理相关命令介绍(2)

本文主要介绍了Linux中进程管理的相关命令,涉及到的主要命令有top,vmstat等. (1)top ①功能:用来查看CPU,内存以及进程的状态. ②用例: ③相关注释: load average表示负载,三个数值分别表示第1分钟,第5分钟,第10分钟 Cpu中us表示用户空间程序占用百分比,sy表示内核模式占用百分比,ni表示调整NICE值所占用的    CPU百分比,id表示CPU的空闲比例,wa表示等待磁盘IO完成所占用的时间比例,hi表示硬件中断占     据的百分比,si表示软中断所

linux系统-进程管理-基本概念和命令

linux系统-进程管理-基本概念和命令 一 基本概念 1 进程:是程序的执行过程,是动态的,有生命周期,动态产生和消亡,程序和进程不是一一对应的 2 父进程和子进程: 子进程是有一个进程产生的进程,产生这个进程的进程成为该进程的父进程 父进程是由linux系统中调用fork产生,fork复制的内容包括父进程的数据和堆栈段以及父进程的堆栈环境 3 父进程与子进程的关系 父进程终止子进程自然终止,如不终止,则为孤儿进程,父进程自动指向init进程 子进程终止父进程没有终止,这父进程成为僵死进程 4

Linux之进程管理(2)相关命令之三

Linux之进程管理(2)相关命令之三 (IPC)进程间通信及信号控制命令 kill  killall   kill 命令 kill - terminate a process,Inter Process Communication 进程通信工具,默认为发送终止信号 选项及用法: kill  -l  #显示所有信号CODE及名称 kill  [-SIGNAL]  pid...#指定发送信号给对应pid的进程,不指定信号代码默认为15信号 常见的信号:(注:可以使用man 7 signal打开帮助

Linux之进程管理(2)相关命令之四

Linux之进程管理(2)相关命令之四 设置或调整进程优先级命令: nice  rnice nice 命令 nice - run a program with modified scheduling priority 运行一个程序时修改调度其进程优先级 格式及用法: nice  [options]  [command [args]] -n  # :#表示要设置此程序nice值,-20到19,值越下,优先级越高 注:-20到19的每个nice值分别对应(Centos5中为100-139,CentO

Linux之进程管理(3)作业管理

Linux之进程管理(3)作业管理 Linux的作业控制介绍: 前台作业:通过终端启动,且启动后一直占据终端: 后台作业:可通过终端启动,但启动后转入后台运行(释放终端): 让进程作业运行在后台: 1.对运行中的进程:使用Ctrl+z 2.尚未启动的作业:COMMAND &  (在命令行的最后面加一个&符号) 后台作业与终端关系的处理: 后台作业虽然被送往后台允许,但其依然与终端相关:退出终端,将关闭后台作业.如果希望送往后台后,同时剥离与终端的关系.可以使用下面两种方法: 1.# noh