linux系统手工启动进程,Linux系统——进程管理

大家都知道在Windows下怎么使用任务管理器来管理进程,那么在Linux下呢?

今天我们一起认识一下如何在Linux系统中使用任务管理器管理进程,保证我们的Linux服务器运行的很流畅。

程序是保存在外部存储介质(如硬盘)中的可执行及其代码个数据的静态集合,而进程是在CPU及内存中处于动态执行状态的计算机程序。在Linux操作系统中,程序启动后可以创建一个或多个进程。

一、查看进程

了解系统中进程的状态是对进程进行管理的前提,使用不同的命令工具可以从不同的角度查看进程状态,常用查看进程的命令有:

(1)PS命令——查看静态的进程统计信息

ps命令是Linux操作系统中最为常用的进程查看工具,主要用于显示包含当前运行的各进程完整信息的静态快照,通过不同的命令选项,可以有选择地查看进程信息。

常用的参数有:

a:显示当前终端的所有进程消息,包括其他用户的进程。与“x”选项结合时可以显示系统中的所有进程信息;

u:使用以用户为主的格式显示输出进程信息;

x:显示当前用户在所有终端下的进程信息;

-e:显示系统中的所有进程信息;

-l:使用长格式显示进程信息;

-f:使用完整的格式显示进程信息。

注意,有一部分的选项不带“-”选项的,如果不小心加上可能会出现错误,详细使用情况可以参考man手册!

[root@localhost ~]# ps aux

//以简单列表的形式显示出进程信息

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.1 0.3 128092 6708 ? Ss 17:56 0:01 /usr/lib/sys

root 2 0.0 0.0 0 0 ? S 17:56 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S 17:56 0:00 [ksoftirqd/0

root 6 0.0 0.0 0 0 ? S 17:56 0:00 [kworker/u25

root 7 0.0 0.0 0 0 ? S 17:56 0:00 [migration/0

root 8 0.0 0.0 0 0 ? S 17:56 0:00 [rcu_bh]

root 9 0.0 0.0 0 0 ? R 17:56 0:00 [rcu_sched]

…………………… //省略部分内容

上述输出信息中,第一行为列表标题,其中各字段的含义描述如图:

linux系统手工启动进程,Linux系统——进程管理_第1张图片

[root@localhost ~]# ps -elf

//以长格式显示系统中的进程信息,并且包含更丰富的内容

//(包括对应进程的父进程的PID号)

F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD

4 S root 1 0 0 80 0 - 32023 ep_pol 17:56 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

1 S root 2 0 0 80 0 - 0 kthrea 17:56 ? 00:00:00 [kthreadd]

1 S root 3 2 0 80 0 - 0 smpboo 17:56 ? 00:00:00 [ksoftirqd/0]

………… //省略部分内容

[root@localhost ~]# ps

PID TTY TIME CMD

2954 pts/0 00:00:00 bash

3298 pts/0 00:00:00 ps

//只显示当前用户会话中打开的进程

[root@localhost ~]# ps aux | grep bash

//由于系统中运行的进程数量较多,需要查询某一个进程的信息时

//可以结合管道操作和grep命令进行过滤

root 696 0.0 0.0 115248 936 ? S 17:56 0:00 /bin/bash /usr/sbin/ksmtuned

root 2666 0.0 0.1 116572 3392 tty2 Ss+ 17:57 0:00 -bash

root 2954 0.0 0.1 116432 3164 pts/0 Ss 17:58 0:00 -bash

root 3309 0.0 0.0 112664 972 pts/0 R+ 18:26 0:00 grep --color=auto bash

(2)top命令——显示进程动态信息

使用ps命令查看到的是一个静态的进程信息,并不能连续地反馈出当前进程的运行状态。若希望系统以动态刷新的方式显示各进程的状态信息,可以使用top命令。top命令将会在当前终端以全屏交互式的假面进行进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每三秒刷新一次,其作用基本类似于Windows操作系统中的任务管理器。

[root@localhost ~]# top

linux系统手工启动进程,Linux系统——进程管理_第2张图片

相关信息的含义:

linux系统手工启动进程,Linux系统——进程管理_第3张图片

在top命令的全屏操作界面中,可以

按“P”键根据CPU占用情况对进程列表进行排序;

按“M”键根据内存占用情况进行排序;

按“N”键根据启动时间进行排序;

按“h”键可以获得top程序的在线帮助信息;

按“q”键可以正常的退出top程序。

若通过top排名工具发现某个进程CPU占用了非常高,需要终止该进程的阳性,可以在top操作界面中按“k”键会出现“PID to signal/kill [default pid = 3513] ”的提示信息, 根据提示输入指定进程的PID好并按Enter键,出现“Send pid 3513 signal [15/sigterm] ”的二次确认信息,然后按Enter键确认即可终止对应的进程。

(3)pgrep命令——查询进程信息

当使用ps命令查询某个进程的PID信息是,往往需要结合grep命令对输出信息进行过滤,但这样使用非常不方便,而pgrep命令正是查询特定进程信息的专用工具。使用pgrep命令可以根据进程的名称,运行进程的用户、进程所在的终端等多种属性查询特定进程的PID号。

通过pgrep命令,可以只指定进程的一部分名称进行查询,结合“-l”选项可以同时输出对应的进程名(否则只输出PID好,不便于理解)。

[root@localhost ~]# pgrep -l "log"

//查询进程名中包含“log”的进程及其PID号

399 xfs-log/dm-0

592 xfs-log/sda1

642 abrt-watch-log

658 abrt-watch-log

661 systemd-logind

987 rsyslogd

2649 login

还可以结合“-U”选项查询特定用户的进程、“-t”选项查询在特定终端运行的进程。比如:

[root@localhost ~]# pgrep -l -U root -t tty2

//查询用户root在tty2终端上运行的进程及PID号

2666 bash

(4)pstree命令——查看进程树

pstree命令可以输出Linux操作系统中各进程的树形结构,以更加直观地判断各进程之间的相互关系(父子进程)。

pstree命令默认情况只显示各进程的名称,可以结合以下选项:

-p:可以列出对应的PID号;

-u:可以列出对应的用户名;

-a:可以列出完整的命令信息。

[root@localhost ~]# pstree -aup

//查看当前系统的进程树,包括各进程对应的PID号、用户名、完整命令等信息。

//输出结果可以看出,systemd进程确实实际Linux操作系统中所有进程的“始祖”。

systemd,1 --system --deserialize 26

├─ModemManager,678

│ ├─{ModemManager},718

│ └─{ModemManager},721

├─NetworkManager,746 --no-daemon

│ ├─{NetworkManager},758

│ └─{NetworkManager},761

………… //省略部分内容

[root@localhost ~]# pstree -ap xiaoli

bash,43888

└─vim,44047 123.txt

//查看只属于用户xiaoli的进程树结构

二、控制进程

(1)启动进程

在Linux操作系统中,可以由用户手工启动或者按预定计划调度启动新的进程。

1)手工启动进程

由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否需要占用当前的命令终端,手工启动又可以分为前台启动和后台启动。

进程子啊前台运行(如执行“ls -l”命令)是,用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台执行运行。进程在后台运行时,用户可以据需在当前终端中输入其他命令,而无须等待该进程结束,适用于运行耗时较长的操作。

启动后台进程需要使用“&”操作符,将“&”操作符放在要执行命令的最后面,进程启动后直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。

[root@localhost ~]# cp /dev/cdrom /a &

//复制系统光盘(内容较多,耗时较长,建议放到后台运行)

1] 44271

//输出信息中华包括后台任务序号、PID号

2)调度启动进程

在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份)这些任务更适合在相对空闲的时候(如夜间)进行。这是就需要用户实现进行调度安排,指定任务运行的时间,当系统达到设定时间时会自动启动并完成指定的任务。调度启动的计划任务进程均在后台运行,不会占用用户的命令终端。

进度的调度启动可以通过at、crontab命令进行设置,其中at命令用于设置一次性计划任务;crontab命令用于设置周期性运行。关于at命令、crontab命令可以参考博文:Linux系统计划任务管理详解

(2)改变进程的运行方式

1)挂起当前的进程

当Linux操作系统中的命令正在前台执行时(尚未结束),按ctrl+z组合键可以将当前进程挂起(调入后台并停止执行),这种操作需要暂停当前进程并进行其他操作时特别有用。比如:

[root@localhost ~]# cp /dev/cdrom mycd.iso

^Z

[1]+ 已停止 cp -i /dev/cdrom mycd.iso

2)查看后台的进程

需要查看当前终端中在后台运行的进程任务是,可以使用“jobs”命令,结合“-l”选型可以同时显示该进程对应的PID号。在jobs命令的树池结果中,每一行记录对应一个后台进程的状态信息,行首的数字表示该进程在后台的任务编号。若当前终端没有后台进程,将不会显示人任何信息。比如:

[root@localhost ~]# jobs -l

[1]+ 44487 停止 cp -i /dev/cdrom mycd.iso

3)将后台的进程恢复运行

使用“bg”命令,可以将后台中暂停执行(如按ctrl+z组合键挂起)的任务恢复运行,继续在后台执行操作,而使用“fg”命令可以将后台任务重新恢复到前台运行。

除非后台中的任务只有一个,否则bg和fg命令都需要指定后台进程的任务编号作为参数。

[root@localhost ~]# fg 1

cp -i /dev/cdrom mycd.iso

//在前台占用终端

[root@localhost ~]# jobs -l

[1]+ 44601 停止 cp -i /dev/cdrom mycd.iso

[root@localhost ~]# bg 1

//放入后台运行

[1]+ cp -i /dev/cdrom mycd.iso &

[root@localhost ~]# jobs -l

[1]+ 44601 运行中 cp -i /dev/cdrom mycd.iso &

(3)终止进程执行

当用户在前台执行某个进程时,可以按ctrl+c组合键强制进行中断。中断前台进程的运行后,系统将返回命令行提示符等待用户输入新的命令。(如果ctrl+c组合键无法终止程序时,可以使用专用的进程终止工具kill、killall和pkill)。

1)使用kill命令终止进程

通过kill命令终止进程时,需要使用进程的PID号作为参数。无特定选项时,kill命令将给该进程发送终止信号并正常退出运行。

kill指令常用的选项,如图:

linux系统手工启动进程,Linux系统——进程管理_第4张图片

比如:

[root@localhost ~]# pgrep -l "sshd"

//查询目标进程的PID号

1263 sshd

44415 sshd

[root@localhost ~]# kill 1263

[root@localhost ~]# kill 44415

//终止指定PID的进程

[root@localhost ~]# pgrep -l "sshd"

//确认进程已终止

对于无法正常终止的系统进程,在必要时可以结合“-9”选项强制终止(强制终止可能会导致数据丢失等情况,一般情况不建议使用),比如:

[root@localhost ~]# vim 123.txt //打开vim程序并挂起作为测试

[1]+ 已停止 vim 123.txt

[root@localhost ~]# jobs -l //查询目标进程的PID号

[1]+ 45874 停止 vim 123.txt

[root@localhost ~]# kill 45874 //尝试正常结束进程

[root@localhost ~]# jobs -l //但发现vim进程并未退出

[1]+ 45874 停止 vim 123.txt

[root@localhost ~]# kill -9 45874 //强制终止目标进程

[root@localhost ~]# jobs -l //测试效果(进程已死)

[1]+ 45874 已杀死 vim 123.txt

2)使用killall命令终止进程

使用killall命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用killall命令将更加方便、效率更高,killall命令同样也有“-9”选项。

[root@localhost ~]# vim 123 //挂起第一个vim测试进程

[1]+ 已停止 vim 123

[root@localhost ~]# vim 1234 //挂起第二个vim测试进程

[2]+ 已停止 vim 1234

[root@localhost ~]# jobs -l //确认带终止的进程信息

[1]- 45922 停止 vim 123

[2]+ 45923 停止 vim 1234

[root@localhost ~]# killall -9 vim //通过进程名终止多个进程

[1]- 已杀死 vim 123

[2]+ 已杀死 vim 1234

[root@localhost ~]# jobs -l //确认效果

3)使用pkill命令终止进程

使用pkill命令可以根据进程的名称,运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与pgrep命令基本类似,如“-U”(指定用户)、“-t”(指定终端)等选项。使用起来非常方便。比如:

[root@localhost ~]# pgrep -l -U "xiaoli" //确认目标进程相关信息

43888 bash

[root@localhost ~]# pkill -9 -U "xiaoli" //强行终止用户xiaoli的进程

[root@localhost ~]# pgrep -l -U "xiaoli" //确认目标进程已被终止

三、扩展指令

(1)free指令:观察内存使用情况;

常用的选项,如图:

linux系统手工启动进程,Linux系统——进程管理_第5张图片

比如:

fbe2e3b9da1b25f807237e793ec5e2de.png

Mem那一行表示显示的是实体内存的量;

Swap那一行表示内存交换空间的量;

total:总量;

used:一使用量;

free:剩余可用量;

shared buff/cache:是在已被使用的量中,用来作为缓冲及高速缓存的量;

(2)uname指令:查阅系统和核心相关信息;

常用的选项与参数,如图:

linux系统手工启动进程,Linux系统——进程管理_第6张图片

(3)netstat指令:追踪网络与插槽;

常用的选项,如图:

linux系统手工启动进程,Linux系统——进程管理_第7张图片

(4)vmstat指令:侦测系统资源变化;

常用的选项,如图:

linux系统手工启动进程,Linux系统——进程管理_第8张图片

比如:

59a8cd592112e82b166313b87fe26f5e.png

程序字段 ( procs ) 的项目分别为:

r :等待运行中的程序数量;

b :不可被唤醒的程序数量。这两个项目越多,代表系统越忙碌 (因为系统太忙,所以很多程序就无法被执行或一直在等待而无法被唤醒之故)。

内存字段 ( memory ) 项目分别为:

swpd :虚拟内存被使用的容量;

free :未被使用的内存容量;

buff :用于缓冲内存;

cache :用于高速缓存内存。 这部份则与free 是相同的;

内存交换空间 ( swap ) 的项目分别为:

si :由磁盘中将程序取出的量;

so :由于内存不足而将没用到的程序写入到磁盘的 swap 的容量。 如果 si/so的数值太大,表示内存内的数据常常得在磁盘与内存之间传来传去,系统性能会很差!

磁盘读写 ( io ) 的项目分别为:

bi :由磁盘读入的区块数量;

bo :写入到磁盘去的区块数量。如果这部份的值越高,代表系统的 I/O 非常忙碌!

系统 ( system ) 的项目分别为:

in :每秒被中断的程序次数;

cs :每秒钟进行的事件切换次数;这两个数值越大,代表系统与周边设备的沟通非常频繁! 这些周边设备当然包括磁盘、网卡、时间钟等。

CPU 的项目分别为:

us :非核心层的 CPU 使用状态;

sy :核心层所使用的 CPU 状态;

id :闲置的状态;

wa :等待 I/O 所耗费的 CPU 状态;

st :被虚拟机 ( virtual machine ) 所盗用的 CPU 使用状态 ( 2.6.11 以后才支持)。

———————— 本文至此结束,感谢阅读 ————————

你可能感兴趣的:(linux系统手工启动进程)