前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux进程管理命令及状态详解

Linux进程管理命令及状态详解

作者头像
bboy枫亭
发布2020-09-22 10:59:47
1.9K0
发布2020-09-22 10:59:47
举报
文章被收录于专栏:csdn_blog

1. 常用的进程管理命令

1.1 ps

查看某个时间点的进程信息。

代码语言:javascript
复制
# 列出所有运行中/激活进程
ps -a
# 查看自己的进程
ps -l
# 查看系统所有进程
ps aux
# 查看特定的进程
ps aux | grep threadx

1.2 pstree

查看进程树。 linux中,每一个进程都是由其父进程创建的。此命令以可视化方式显示进程,通过显示进程的树状图来展示进程间关系。如果指定了pid了,那么树的根是该pid,不然将会是init(pid: 1)。

代码语言:javascript
复制
#查看所有进程树
pstree

1.3 top

实时显示进程信息。 top 是一个更加有用的命令,可以监视系统中不同的进程所使用的资源。它提供实时的系统状态信息。显示进程的数据包括PID、进程属主、优先级、%CPU、%memory等。可以使用这些显示指示出资源使用量。

代码语言:javascript
复制
# 示例:两秒钟刷新一次
top -d 2

可以按上下键浏览,按 q 退出。


代码语言:javascript
复制
# 交互式的文本模式的进程查看器
htop

htop与top很类似,但是htop是交互式的文本模式的进程查看器。它通过文字图形化地显示每一个进程的CPU和内存使用量、swap使用量。使用上下光标键选择进程,F7和F8改变优先级,F9杀死进程。Htop不是系统默认安装的,所以需要额外安装。

安装方法(我这里是 centos7)

代码语言:javascript
复制
一、以yum方式安装

1、yum -y install epel-release.noarch

2、yum -y install htop

二、源码方式安装

1、安装gcc、内核库依赖库

yum install -y gcc ncurses-deve

2、下载源码

wget http://sourceforge.net/projects/htop/files/latest/download

3、解压并进入htop-1.0.2目录

tar -zxf download

cd htop-1.0.2

4、编译安装(执行./configure如果执行报错 configure: error: You may want to use --disable-unicode or install libncursesw,表明缺少lib 包,安装lib包:yum install ncurses-devel -y)

./configure && make && make install

5、验证

htop

1.4 netstat

查看占用端口的进程

代码语言:javascript
复制
# 示例:查看特定端口的进程
netstat -anp | grep port

1.5 nice

通过nice命令的帮助,用户可以设置和改变进程的优先级。提高一个进程的优先级,内核会分配更多CPU时间片给这个进程。默认情况下,进程以0的优先级启动。进程优先级可以通过top命令显示的NI(nice value)列查看。

进程优先级值的范围从-20到19。值越低,优先级越高。

nice <优先值> <进程名> :通过给定的优先值启动一个程序

示例:nice --3 top 回车可以看到 top 命令获得了-3的优先值。

renice 命令类似 nice 命令。使用这个命令可以改变正在运行的进程优先值。注意,用户只能改变属于他们自己的进程的优先值。

renice -n -p - 改变指定进程的优先值

示例:renice -n 4 -p 1950

初始优先值为0的1950号进程优先值已经变成了4。

renice -u -g - 通过指定用户和组来改变进程优先值

示例:renice -3 -u lft

用户为 ‘lft’ 的所有进程优先值变为 ‘-3’。

1.6 kill

这个命令用于发送信号来结束进程。如果一个进程没有响应杀死命令,这也许就需要强制杀死,使用 -9 参数来执行。注意,使用强制杀死的时候一定要小心,因为进程没有时机清理现场,也许写入文件没有完成。如果我们不知道进程 PID 或者打算用名字杀死进程时候,killall就能派上用场。

kill <pid> kill -9 <pid> killall -9 杀死所有拥有同样名字的进程 如果你使用 kill,你需要知道进程 ID 号。pkill 是类似的命令,但使用模式匹配,如进程名,进程拥有者等。

pkill <进程名>

2. 进程状态

2.1 SIGCHLD

当一个子进程改变了它的状态时(停止运行,继续运行或者退出),有两件事会发生在父进程中:

得到 SIGCHLD 信号; waitpid() 或者 wait() 调用会返回。 其中子进程发送的 SIGCHLD 信号包含了子进程的信息,比如进程 ID、进程状态、进程使用 CPU 的时间等。

在子进程退出时,它的进程描述符不会立即释放,这是为了让父进程得到子进程信息,父进程通过 wait() 和 waitpid() 来获得一个已经退出的子进程的信息。

2.2 wait()

pid_t wait(int *status) Copy to clipboardErrorCopied 父进程调用 wait() 会一直阻塞,直到收到一个子进程退出的 SIGCHLD 信号,之后 wait() 函数会销毁子进程并返回。

如果成功,返回被收集的子进程的进程 ID;如果调用进程没有子进程,调用就会失败,此时返回 -1,同时 errno 被置为 ECHILD。

参数 status 用来保存被收集的子进程退出时的一些状态,如果对这个子进程是如何死掉的毫不在意,只想把这个子进程消灭掉,可以设置这个参数为 NULL。

2.3 waitpid()

pid_t waitpid(pid_t pid, int *status, int options) Copy to clipboardErrorCopied 作用和 wait() 完全相同,但是多了两个可由用户控制的参数 pid 和 options。

pid 参数指示一个子进程的 ID,表示只关心这个子进程退出的 SIGCHLD 信号。如果 pid=-1 时,那么和 wait() 作用相同,都是关心所有子进程退出的 SIGCHLD 信号。

options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 waitpid() 调用变成非阻塞的,也就是说它会立即返回,父进程可以继续执行其它任务。

2.4 孤儿进程

一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。

孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。

由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害。

2.5 僵尸进程

一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。

僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。

系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。

要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。

本文参考资料: https://www.cnblogs.com/wangguod/p/9895011.html http://liubigbin.github.io/2016/03/11/Linux-%E4%B9%8B%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E3%80%81%E5%83%B5%E6%AD%BB%E8%BF%9B%E7%A8%8B%E4%B8%8E%E5%AD%A4%E5%84%BF%E8%BF%9B%E7%A8%8B/ https://idea.popcount.org/2012-12-11-linux-process-states/ https://www.linuxprobe.com/12linux-process-commands.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 常用的进程管理命令
    • 1.1 ps
      • 1.2 pstree
        • 1.3 top
          • 1.4 netstat
            • 1.5 nice
              • 1.6 kill
              • 2. 进程状态
                • 2.1 SIGCHLD
                  • 2.2 wait()
                    • 2.3 waitpid()
                      • 2.4 孤儿进程
                        • 2.5 僵尸进程
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档