linux

推荐列表 站点导航

当前位置:首页 > 操作系统 > linux >

Linux中4个简单的找出进程ID(PID)的方法

来源:网络整理  作者:  发布时间:2020-12-22 20:04
每个人都知道 PID,究竟什么是 PID?为什么你想要 PID?你打算用 PID 做什么?你脑子里有同样的问题吗?如果是这样,...

每个人都知道 PID,究竟什么是 PID?为什么你想要 PID?你打算用 PID 做什么?你脑子里有同样的问题吗?如果是这样,你就找对地方了解这些细节了。

我们查询 PID 主要是用来杀死一个没有响应的程序,它类似于 Windows 任务管理器一样。 Linux GUI 也提供相同的功能,但 CLI 是执行 kill 操作的有效方法。

 

什么是进程 ID?

PID 代表进程标识号,它在大多数操作系统内核(如 Linux、Unix、macOS 和 Windows)中使用。它是在操作系统中创建时自动分配给每个进程的唯一标识号。一个进程是一个正在运行的程序实例。

除了 init 进程外其他所有的进程 ID 每次都会改变,因为 init 始终是系统上的第一个进程,并且是所有其他进程的父进程。它的 PID 是 1。

PID 默认的最大值是 32768。可以在你的系统上运行 cat /proc/sys/kernel/pid_max 来验证。在 32 位系统上,32768 是最大值,但是我们可以在 64 位系统上将其设置为最大 222(约 4 百万)内的任何值。

你可能会问,为什么我们需要这么多的 PID?因为我们不能立即重用 PID,这就是为什么。另外为了防止可能的错误。

系统正在运行的进程的 PID 可以通过使用 pidof、pgrep、ps 和 pstree 命令找到。

 

方法 1、使用 pidof 命令

pidof 用于查找正在运行的程序的进程 ID。它在标准输出上打印这些 id。为了演示,我们将在 Debian 9(stretch)系统中找出 Apache2 的进程 ID。

# pidof apache2

3754 2594 2365 2364 2363 2362 2361

从上面的输出中,你可能会遇到难以识别进程 ID 的问题,因为它通过进程名称显示了所有的 PID(包括父进程和子进程)。因此,我们需要找出父 PID(PPID),这是我们要查找的。它可能是第一个数字。在本例中,它是 3754,并按降序排列。

 

方法 2、使用 pgrep 命令

pgrep 遍历当前正在运行的进程,并将符合选择条件的进程 ID 列到标准输出中。

# pgrep apache2

2361

2362

2363

2364

2365

2594

3754

这也与上面的输出类似,但是它将结果从小到大排序,这清楚地说明父 PID 是最后一个。在本例中,它是 3754。

注意: 如果你有多个进程的进程 ID,那么在使用 pidof 和 pgrep 识别父进程 ID 时就可能不会很顺利。

 

方法 3、使用 pstree 命令

pstree 将运行的进程显示为一棵树。树的根是某个 pid,如果省略了 pid 参数,那么就是 init。如果在 pstree 命令中指定了用户名,则显示相应用户拥有的所有进程。

pstree 会将相同的分支放在方括号中,并添加重复计数的前缀来可视化地合并到一起。

# pstree -p | grep "apache2"

|- apache2(3754) -|-apache2(2361)

| |-apache2(2362)

| |-apache2(2363)

| |-apache2(2364)

| |-apache2(2365)

| `-apache2(2594)

要单独获取父进程,请使用以下格式。

# pstree -p | grep "apache2" | head -1

|- apache2(3754) -|-apache2(2361)

pstree 命令非常简单,因为它分别隔离了父进程和子进程,但这在使用 pidof 和 pgrep 时命令不容易做到。

 

方法 4、使用 ps 命令

ps 显示活动进程的选择信息。它显示进程 ID(pid=PID)、与进程关联的终端(tname=TTY)、以 [DD-]hh:mm:ss 格式(time=TIME)显示的累计 CPU 时间、以及执行名(ucmd = CMD)。输出默认是未排序的。

# ps aux | grep "apache2"

www-data 2361 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start

www-data 2362 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start

www-data 2363 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start

www-data 2364 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start

www-data 2365 0.0 0.4 302652 8400 ? S 06:25 0:00 /usr/sbin/apache2 -k start

www-data 2594 0.0 0.4 302652 8400 ? S 06:55 0:00 /usr/sbin/apache2 -k start

root 3754 0.0 1.4 302580 29324 ? Ss Dec11 0:23 /usr/sbin/apache2 -k start

root 5648 0.0 0.0 12784 940 pts/0 S+ 21:32 0:00 grep apache2

从上面的输出中,我们可以根据进程的启动日期轻松地识别父进程 ID(PPID)。在此例中,apache2 启动于 Dec 11,它是父进程,其他的是子进程。apache2 的 PID 是 3754。

 

linux:获取监听指定端口的进程PID:

用python记录运行pid,并在需要时kill掉它们:

Linux端口号与PID的互相查询:

linux下/proc/pid文件内容详解:

Linux系统入门学习:如何在脚本中获取进程ID(PID):

相关热词: Linux 方法

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/xt/linux/7342.shtml

相关文章
最新文章
并进行了数次优化更改 并进行了数次优化更改

时间:2021-01-23

在Linus发表文章的第二年 在Linus发表文章的第二年

时间:2021-01-23

当一个文件被加载时 当一个文件被加载时

时间:2021-01-21

 与--delete 呼应的是--exis 与--delete 呼应的是--exis

时间:2021-01-21

 $top top-18:50:38up6days $top top-18:50:38up6days

时间:2021-01-21

CLI和程序包管理器使开发 CLI和程序包管理器使开发

时间:2021-01-20

但是有时候这个系统上跑 但是有时候这个系统上跑

时间:2021-01-20

配置好prometheus数据源 配置好prometheus数据源

时间:2021-01-20

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

Linux中4个简单的找出进程ID(PID)的方法

2020-12-22 编辑:

每个人都知道 PID,究竟什么是 PID?为什么你想要 PID?你打算用 PID 做什么?你脑子里有同样的问题吗?如果是这样,你就找对地方了解这些细节了。

我们查询 PID 主要是用来杀死一个没有响应的程序,它类似于 Windows 任务管理器一样。 Linux GUI 也提供相同的功能,但 CLI 是执行 kill 操作的有效方法。

 

什么是进程 ID?

PID 代表进程标识号,它在大多数操作系统内核(如 Linux、Unix、macOS 和 Windows)中使用。它是在操作系统中创建时自动分配给每个进程的唯一标识号。一个进程是一个正在运行的程序实例。

除了 init 进程外其他所有的进程 ID 每次都会改变,因为 init 始终是系统上的第一个进程,并且是所有其他进程的父进程。它的 PID 是 1。

PID 默认的最大值是 32768。可以在你的系统上运行 cat /proc/sys/kernel/pid_max 来验证。在 32 位系统上,32768 是最大值,但是我们可以在 64 位系统上将其设置为最大 222(约 4 百万)内的任何值。

你可能会问,为什么我们需要这么多的 PID?因为我们不能立即重用 PID,这就是为什么。另外为了防止可能的错误。

系统正在运行的进程的 PID 可以通过使用 pidof、pgrep、ps 和 pstree 命令找到。

 

方法 1、使用 pidof 命令

pidof 用于查找正在运行的程序的进程 ID。它在标准输出上打印这些 id。为了演示,我们将在 Debian 9(stretch)系统中找出 Apache2 的进程 ID。

# pidof apache2

3754 2594 2365 2364 2363 2362 2361

从上面的输出中,你可能会遇到难以识别进程 ID 的问题,因为它通过进程名称显示了所有的 PID(包括父进程和子进程)。因此,我们需要找出父 PID(PPID),这是我们要查找的。它可能是第一个数字。在本例中,它是 3754,并按降序排列。

 

方法 2、使用 pgrep 命令

pgrep 遍历当前正在运行的进程,并将符合选择条件的进程 ID 列到标准输出中。

# pgrep apache2

2361

2362

2363

2364

2365

2594

3754

这也与上面的输出类似,但是它将结果从小到大排序,这清楚地说明父 PID 是最后一个。在本例中,它是 3754。

注意: 如果你有多个进程的进程 ID,那么在使用 pidof 和 pgrep 识别父进程 ID 时就可能不会很顺利。

 

方法 3、使用 pstree 命令

pstree 将运行的进程显示为一棵树。树的根是某个 pid,如果省略了 pid 参数,那么就是 init。如果在 pstree 命令中指定了用户名,则显示相应用户拥有的所有进程。

pstree 会将相同的分支放在方括号中,并添加重复计数的前缀来可视化地合并到一起。

# pstree -p | grep "apache2"

|- apache2(3754) -|-apache2(2361)

| |-apache2(2362)

| |-apache2(2363)

| |-apache2(2364)

| |-apache2(2365)

| `-apache2(2594)

要单独获取父进程,请使用以下格式。

# pstree -p | grep "apache2" | head -1

|- apache2(3754) -|-apache2(2361)

pstree 命令非常简单,因为它分别隔离了父进程和子进程,但这在使用 pidof 和 pgrep 时命令不容易做到。

 

方法 4、使用 ps 命令

ps 显示活动进程的选择信息。它显示进程 ID(pid=PID)、与进程关联的终端(tname=TTY)、以 [DD-]hh:mm:ss 格式(time=TIME)显示的累计 CPU 时间、以及执行名(ucmd = CMD)。输出默认是未排序的。

# ps aux | grep "apache2"

www-data 2361 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start

www-data 2362 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start

www-data 2363 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start

www-data 2364 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start

www-data 2365 0.0 0.4 302652 8400 ? S 06:25 0:00 /usr/sbin/apache2 -k start

www-data 2594 0.0 0.4 302652 8400 ? S 06:55 0:00 /usr/sbin/apache2 -k start

root 3754 0.0 1.4 302580 29324 ? Ss Dec11 0:23 /usr/sbin/apache2 -k start

root 5648 0.0 0.0 12784 940 pts/0 S+ 21:32 0:00 grep apache2

从上面的输出中,我们可以根据进程的启动日期轻松地识别父进程 ID(PPID)。在此例中,apache2 启动于 Dec 11,它是父进程,其他的是子进程。apache2 的 PID 是 3754。

 

linux:获取监听指定端口的进程PID:

用python记录运行pid,并在需要时kill掉它们:

Linux端口号与PID的互相查询:

linux下/proc/pid文件内容详解:

Linux系统入门学习:如何在脚本中获取进程ID(PID):

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/xt/linux/7342.shtml

相关文章

风云图片

推荐阅读

返回linux频道首页