专栏首页csdn_blogLinux进程管理命令及状态详解

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

1. 常用的进程管理命令

1.1 ps

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

# 列出所有运行中/激活进程
ps -a
# 查看自己的进程
ps -l
# 查看系统所有进程
ps aux
# 查看特定的进程
ps aux | grep threadx

1.2 pstree

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

#查看所有进程树
pstree

1.3 top

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

# 示例:两秒钟刷新一次
top -d 2

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


# 交互式的文本模式的进程查看器
htop

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

安装方法(我这里是 centos7)

一、以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

查看占用端口的进程

# 示例:查看特定端口的进程
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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux求助命令

    今天分享一下我学习 Linux 命令的神技:向命令求命令 在学习或者忘记 Linux 的某一个命令时,我一般不会直接去翻书或百度。 先走以下流程:(本文以ifc...

    bboy枫亭
  • centos7安装Docker详细步骤(无坑版教程)

    在安装 Docker 之前,先说一下配置,我这里是Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。

    bboy枫亭
  • Java注解详细总结

    – 不是程序本身,可以对程序作出解释。(这一点,跟注释没什么区别) – 可以被其他程序(比如:编译器等)读取。 (注解信息处理流程,是注解和注释的重大区别 ...

    bboy枫亭
  • Linux(十五)进程管理

    leeqico
  • 什么是僵尸进程,如何找到并杀掉僵尸进程?

    如果你经常使用 Linux,你应该遇到这个术语“僵尸进程Zombie Processes”。 那么什么是僵尸进程? 它们是怎么产生的? 它们是否对系统有害? 我...

    前端博客 : alili.tech
  • 操作系统 - 进程

    系统为每一个运行的程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放位置)

    用户5705150
  • 进程 · 全家桶

    fork调用一次返回两次 父进程中返回子进程id (就是大于0的意思) 子进程返回0 读时共享写时复制,可保高效

    看、未来
  • 关于进程的分类

    默认情况下,进程是在前台运行的,这时就把shell给占据了,我们无法进行其它操作。对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候...

    shengjk1
  • 1.进程管理

    11、对进程的描述错误的是( d) A.进程是动态的概念 B.进程执行需要处理机 C.进程是有生命期的 D.进程是指令的集合

    见贤思齊
  • 从CPU管理到进程的引入

    为什么要管理CPU,这是因为在“上古时代”,CPU是计算机硬件之中最昂贵的资源。因此提高CPU利用率是很有必要的。我们知道只要给CPU的PC一个地址,CPU就能...

    zy010101

扫码关注云+社区

领取腾讯云代金券