Linux进程管理方法介绍

目录
  • 一、简介
  • 二、创建进程
    • 1、前台进程
    • 2、后台进程
  • 三、查看正在运行的进程
  • 四、终止进程
  • 五、父进程和子进程
  • 六、僵尸进程和孤儿进程
  • 七、常驻进程
  • 八、top命令
  • 九、任务和进程
  • 十、前台任务和后台任务的切换

一、简介

当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰。这个特殊的环境就称为进程。每个 Linux 命令都与系统中的程序对应,输入命令,Linux 就会创建一个新的进程。例如使用 ls 命令遍历目录中的文件时,就创建了一个进程。简而言之,进程就是程序的实例。 
系统通过一个五位数字跟踪程序的运行状态,这个数字称为 pid 或进程ID。每个进程都拥有唯一的 pid。 
理论上,五位数字是有限的,当数字被用完时,下一个 pid 就会重新开始,所以 pid 最终会重复。但是,两个 pid 一样的进程不能同时存在,因为Linux会使用 pid 来跟踪程序的运行状态。

二、创建进程

有两种方式来创建进程:前台进程后台进程

1、前台进程

默认情况下,用户创建的进程都是前台进程;前台进程从键盘读取数据,并把处理结果输出到显示器。 
我们可以看到前台进程的运行过程。例如,使用 ls 命令来遍历当前目录下的文件:

$ls ch*.doc
ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc
ch04-1.doc   ch040.doc  ch05.doc

这个程序就运行在前台,它会直接把结果输出到显示器。如果 ls 命令需要数据(实际上不需要),那么它会等待用户从键盘输入。

当程序运行在前台时,由于命令提示符($)还未出现,用户不能输入其他命令;即使程序需要运行很长时间,也必须等待程序运行结束才能输入其他命令。

2、后台进程

后台进程与键盘没有必然的关系。当然,后台进程也可能会等待键盘输入。 
后台进程的优点不必等待程序运行结束就可以输入其他命令。 
创建后台进程最简单的方式就是在命令的末尾加 &,例如:

$ls ch*.doc &
ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

如果 ls 命令需要输入(实际上不需要),那么它会暂停,直到用户把它调到前台并从键盘输入数据才会继续运行。

三、查看正在运行的进程

可以使用 ps 命令查看进程的运行状态,包括后台进程,例如:

$ps
PID       TTY      TIME        CMD
18358     ttyp3    00:00:00    sh
18361     ttyp3    00:01:31    abiword
18789     ttyp3    00:00:00    ps

还可以结合 -f 选项查看更多信息,f 是 full 的缩写,例如:

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f

每列的含义如下:

  • UID:进程所属用户的ID,即哪个用户创建了该进程。
  • PID:进程ID。
  • PPID:父进程ID,创建该进程的进程称为父进程。
  • C:CPU使用率。
  • STIME:进程被创建的时间。
  • TTY:与进程有关的终端类型。
  • TIME:进程所使用的CPU时间。
  • CMD:创建该进程的命令。

ps 命令还有其他一些选项:

  • -a:显示所有用户的所有进程。
  • -x:显示无终端的进程。
  • -u:显示更多信息,类似于 -f 选项。
  • -e:显示所有进程。

四、终止进程

进程运行在前台时,可以通过 kill 命令或 Ctrl+C 组合键来结束进程。 
如果进程运行在后台,那么首先要通过 ps 命令来获取进程ID,然后使用 kill 命令“杀死”进程,例如:

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated

如上所示,kill 命令终结了 first_one 进程。

如果进程忽略 kill 命令,那么可以通过 kill -9 来结束:

$kill -9 6738
Terminated

1.命令格式

kill[参数][进程号]

2.命令功能

发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。

3.命令参数:

  • -l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
  • -a 当处理当前进程时,不限制命令名和进程号的对应关系
  • -p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
  • -s 指定发送信号
  • -u 指定用户

注意:

  • kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如: 
    kill -2 123 
    它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。
  • kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息。
  • 可以向多个进程发信号或终止它们。
  • 当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。
  • 应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。

信号说明

只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 下面是常用的信号:

  • HUP 1 终端断线
  • INT 2 中断(同 Ctrl + C)
  • QUIT 3 退出(同 Ctrl + \)
  • TERM 15 终止
  • KILL 9 强制终止
  • CONT 18 继续(与STOP相反, fg/bg命令)
  • STOP 19 暂停(同 Ctrl + Z)

五、父进程和子进程

每个 Linux 进程会包含两个进程ID:当前进程ID(pid)和父进程ID(ppid)。可以暂时认为所有的进程都有父进程。 
由用户运行的大部分命令都将 Shell 作为父进程,使用 ps -f 命令可以查看当前进程ID和父进程ID。

六、僵尸进程和孤儿进程

正常情况下,子进程被终止时会通过 SIGCHLD 信号通知父进程,父进程可以做一些清理工作或者重新启动一个新的进程。但在某些情况下,父进程会在子进程之前被终止,那么这些子进程就没有了“父亲”,被称为孤儿进程。 
init 进程会成为所有孤儿进程的父进程。init 的 pid 为1,是Linux系统的第一个进程,也是所有进程的父进程。 
如果一个进程被终止了,但是使用 ps 命令仍然可以查看该进程,并且状态为 Z,那么这就是一个僵尸进程。僵尸进程虽然被终止了,但是仍然存在于进程列表中。一般僵尸进程很难杀掉,你可以先杀死他们的父进程,让他们变成孤儿进程,init 进程会自动清理僵尸进程。

七、常驻进程

常驻进程一般是系统级进程,以 root 权限运行在后台,可以处理其他进程的请求。 
常驻进程没有终端,不能访问 /dev/tty 文件,如果使用 ps -ef 查看该进程,tty 这一列会显示问号(?)。 
更确切地说,常驻进程通常运行在后台,等待指定事件发生,例如打印进程是一个常驻进程,它会等待用户输入打印相关的命令并进行处理。

八、top命令

top 命令是一个很有用的工具,它可以动态显示正在运行的进程,还可以按照指定条件对进程进行排序,与Windows的任务管理器类似。 
top 命令可以显示进程的很多信息,包括物理内存、虚拟内存、CPU使用率、平均负载以及繁忙的进程等。例如:

$top

九、任务和进程

任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动。一个任务既可以是一个进程,也可以是多个进程。简而言之,它指的是一系列共同达到某一目的的操作。例如,读取数据并将数据放入内存中。这个任务可以由一个进程来实现,也可以由多个进程来实现。 每个任务都有一个数字表示的任务号。

进程(process)常常被定义为程序的执行。可以把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间。一个进程所拥有的数据和变量只属于它自己。

jobs 命令可以用来查看系统中正在运行的任务,包括后台运行的任务。该命令可以显示任务号及其对应的进程ID。一个任务可以对应于一个或者多个进程号。 
jobs 命令的 -l 选项可以查看当前任务包含的进程ID:

$jobs -l
[1] + 1903 running                 ls ch*.doc &
$

其中,第一列表示任务号,第二列表示任务对应的进程ID,第三列表示任务的运行状态,第四列表示启动任务的命令。

十、前台任务和后台任务的切换

1、fg 命令可以将后台任务调到前台,语法为:

$fg %jobnumber

jobnumber 是通过 jobs 命令获取的后台任务的的序号,注意不是pid。如果后台只有一个任务,可以不指定 jobnumber。

2、bg 命令可以将后台暂停的任务,调到前台继续运行,语法为:

$bg %jobnumber

jobnumber 同样是通过 jobs 命令获取的后台任务的的序号,注意不是pid。如果前台只有一个任务,可以不指定 jobnumber。 
如果希望将当前任务转移到后台,可以先 Ctrl+z 暂停任务,再使用 bg 命令。任务转移到后台可以空出终端,继续输入其他命令。

到此这篇关于Linux进程管理的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Linux运维基础进程管理实时监控控制

    目录 1.后台运行作业 2.使用信号控制进程 基本进程管理信号 3.监控进程活动 IO负载 4.实时进程监控 top用于实现全屏动态显示系统信息 1.后台运行作业 1.sleep 999 & (运行作业) [root@localhost ~]# sleep 999 & [1] 3670 2.ps -ef|grep sleep(查看进程) [root@localhost ~]# ps -ef|grep sleep root 3670 3642 0 10:54 pts/1 00:00:00 s

  • Linux运维工具Supervisor的安装使用(进程管理工具)

    一.介绍 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启.目前Supervisor可以运行在大多数Unix系统上,但不支持在Windows系统上运行.Supervisor需要Python2.4及以上版本,但任何Python 3版本都不支持. 二.自带Web管理程序 Supervisor有四个组件: 1. supervisord 运行Supervisor的后台服务,它用来启动和管理那些你需要Sup

  • 详解Supervisor安装与配置(Linux/Unix进程管理工具)

    Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统.它可以很方便的监听.启动.停止.重启一个或多个进程.用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制. 因为Supervisor是Python开发的,安装前先检查一下

  • Linux进程管理工具supervisor安装配置教程

    环境:CentOS 7 官方文档:http://supervisord.org/ 安装 # yum install -y epel-release # yum install -y supervisor 启动 # supervisord -c /etc/supervisord.conf # ps -ef | grep supervisor root 19703 1 0 17:32 ? 00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/su

  • linux系统之进程管理详解

    目录 1.进程与线程的概念 2.什么是进程管理 3.进程管理的作用 4.Linux进程的几种状态 5.进程与线程的关系 (1)线程与进程的关系 (2)总结 1.进程与线程的概念 来源百度百科: 进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体.是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和

  • Linux运维基础进程管理及环境组成分析

    1.进程基本概述 进程是已启动的可执行程序的运行中实例. /proc目录下以数字为名的目录,每一个目录代表一个进程,保存着进程的属性信息. 每一个进程的PID是唯一的,就算进程退出了,其它进程也不会占用其PID 2.进程的组成部分 已分配内存的地址空间 安全属性,包括所有权凭据和特权 程序代码的一个或多个执行线程 进程状态 3.进程的环境 本地和全局变量 当前调度上下文 分配的系统资源,如文件描述符和网络端口 4.进程状态 标志 内核定义的状态名称和描述 R TASK_RUNNING:进程正在C

  • Linux进程管理方法介绍

    目录 一.简介 二.创建进程 1.前台进程 2.后台进程 三.查看正在运行的进程 四.终止进程 五.父进程和子进程 六.僵尸进程和孤儿进程 七.常驻进程 八.top命令 九.任务和进程 十.前台任务和后台任务的切换 一.简介 当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰.这个特殊的环境就称为进程.每个 Linux 命令都与系统中的程序对应,输入命令,Linux 就会创建一个新的进程.例如使用 ls 命令遍历目

  • linux目录管理方法介绍

    一.目录结构 目录也是一个文件,它的唯一功能是用来保存文件及其相关信息.所有的文件,包括普通文件.设备文件和目录文件,都会被保存到目录中. 1.绝对路径和相对路径 / Linux 的目录有清晰的层次结构,/ 代表根目录,所有的目录都位于 / 下面:文件在层次结构中的位置可以用路径来表示. 如果一个路径以 / 开头,就称为绝对路径:它表示当前文件与根目录的关系.举例如下: /etc/passwd /users/sjones/chem/notes /dev/rdsk/Os3 不以 / 开头的路径称为

  • Linux磁盘管理方法介绍

    Linux磁盘管理好坏直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 fdisk:用于磁盘分区 一.df(disk free) :查看磁盘空间的剩余情况 df命令df (disk free) 参数功能:检查文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. df -k 命令可以用来查看磁盘空间的使用情况(以千字节计), df [-ahikHTm]

  • Linux用户和用户组管理方法介绍

    目录 一.用户账号的管理 1.添加新的用户账号使用useradd命令,其语法如下: 2.删除帐号 3.修改帐号 4.用户口令的管理 二.用户组的管理 1.增加一个新的用户组使用groupadd命令.其格式如下: 2.如果要删除一个已有的用户组,使用groupdel命令,其格式如下: 3.修改用户组的属性使用groupmod命令.其语法如下: 4.如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限. 三.与用户账号有关的系统文件 1./etc/passwd文件,

  • C#操作进程的方法介绍

    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体. 下面为大家介绍C#是如何操作进程的. 1.获取当前程序中正在运行的所有进程 //1.获取本机所有进程 Process[] pro = Process.GetProcesses(); foreach (Pr

  • 把windows下的字体安装到Linux系统下的方法介绍

    Linux(Fedora/Ubuntu/CentOS)的字体实在不尽如人意,而且在网页及文档显示时很多字无法显示出来,特别多的空白和乱码,其实,我们可以把windows下的字体和自己心仪的字体添加到Linux中,本文将介绍如何在Linux下添加字体. 一.Linux添加字体方法介绍 1.首先在windows的"控制面板"->"字体"中,将自己要的字体复制出来. 再进入到Linux(Fedora/Ubuntu),在桌面新建一个文件夹,名字叫做font,把Wind

  • 一行代码教你如何隐藏Linux进程

    总有朋友问隐藏Linux进程的方法,我说你想隐藏到什么程度,是大隐于内核,还是小隐于用户. 网上通篇论述的无外乎hook掉procfs或者类似的用户态方案,也都难免长篇大论,我说,这些场面都太大了,太复杂了.对于希望马上看到效果的而言,看到这么一堆复杂的东西,大概率望而却步. 本文介绍一种将Linux进程小隐于用户的非常规方法,仅仅一行代码: 修改掉进程的pid即可. 注意是小隐,所以,不值得反制,逗一下高级会议工程师搞个恶作剧玩玩得了. target->pid = 0x7fffffff; 完整

随机推荐