查看进程PID的几种方法记录-20230328

什么是进程ID?

PID 代表进程标识号process identification,它在大多数操作系统内核(如 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 可以通过使用 pidofpgreppspstree 命令找到。

方法1:使用pidof命令

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

# pidof apache23754 2594 2365 2364 2363 2362 2361

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

方法 2:使用 pgrep 命令

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

# pgrep apache22361236223632364236525943754

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

注意: 如果你有多个进程的进程 ID,那么在使用 pidofpgrep 识别父进程 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 命令非常简单,因为它分别隔离了父进程和子进程,但这在使用 pidofpgrep 时命令不容易做到。

方法 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 startwww-data 2362 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k startwww-data 2363 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k startwww-data 2364 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k startwww-data 2365 0.0 0.4 302652 8400 ? S 06:25 0:00 /usr/sbin/apache2 -k startwww-data 2594 0.0 0.4 302652 8400 ? S 06:55 0:00 /usr/sbin/apache2 -k startroot 3754 0.0 1.4 302580 29324 ? Ss Dec11 0:23 /usr/sbin/apache2 -k startroot 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 中 4 个简单的找出进程 ID(PID)的方法

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误提示是 Nginx 服务器启动时出现的错误,通常是由于 Nginx 的进程 ID(PID)号码无效导致的。这可能是由于以下原因之一引起的: 1. Nginx 进程已经停止,但 PID 文件仍然存在,导致 Nginx 无法启动新进程。 2. PID 文件中的 PID 号码与实际进程PID 号码不匹配。 3. PID 文件中的 PID 号码已经被其他进程占用。 要解决这个问题,可以尝试以下步骤: 1. 检查 Nginx 进程是否已经停止,并删除 PID 文件。 2. 如果 PID 文件中的 PID 号码与实际进程PID 号码不匹配,可以手动修改 PID 文件中的号码。 3. 如果 PID 文件中的 PID 号码已经被其他进程占用,可以尝试重新启动 Nginx 或者重启服务器。 ### 回答2: nginx: [error] invalid pid num是指Nginx在启动或重新加载配置文件时遇到了无效的进程ID号。这个错误通常在Nginx进程PID文件中出现。 PID文件是一个记录Nginx主进程ID的文本文件,它的默认位置是/var/run/nginx.pid。当Nginx启动时,它会将主进程的ID写入到PID文件中。而当Nginx重新加载配置文件时,它会检查PID文件中存储的ID是否有效。 出现"nginx: [error] invalid pid num"错误的原因可能有以下几个方面: 1. PID文件不存在:如果PID文件不存在或被删除,Nginx无法验证进程ID的有效性,导致报错。此时,可以尝试重新启动Nginx来重新生成PID文件。 2. PID文件被其他进程占用:如果PID文件被其他进程占用,Nginx会认为存储在文件中的进程ID无效。此时,可以通过查看PID文件所指向的进程是否已经停止,并将其释放,然后重启Nginx。 3. PID文件被修改或损坏:如果PID文件被修改或损坏,其中存储的进程ID可能会变得无效。此时,可以将PID文件备份并删除,然后重启Nginx让其重新生成一个新的PID文件。 总的来说,"nginx: [error] invalid pid num"错误是由于Nginx在加载或重新加载配置文件时无法验证进程ID的有效性所引起的。解决方法包括确认PID文件是否存在、是否被其他进程占用以及是否被修改或损坏,并采取相应的措施进行修复。 ### 回答3: Nginx是一款常用的高性能Web服务器软件,它是一个轻量级的HTTP服务器,也可以作为反向代理服务器、负载均衡器和邮件服务器等使用。在运行Nginx时,有时可能会遇到"nginx: [error] invalid pid num"的错误消息。 这个错误消息表明Nginx启动时无法识别或读取pid文件中的无效进程ID。每当Nginx启动时,它会将进程ID写入一个特定的文件,通常是在"/var/run"目录下的"nginx.pid"文件。这样做的目的是为了方便管理和控制服务进程。 当出现"nginx: [error] invalid pid num"错误时,有几种可能的原因: 1. pid文件被删除或损坏:检查pid文件是否存在,并且权限是否正确。如果pid文件不存在或无效,则可以尝试手动创建一个新的pid文件,并确保文件所属用户和组与Nginx进程的用户和组相匹配。 2. 磁盘空间不足:如果pid文件所在的磁盘空间不足,Nginx将无法将进程ID写入文件中。请确保磁盘有足够的可用空间来存储pid文件。 3. 进程被另一个程序占用:如果另一个进程在尝试启动Nginx时正在使用相同的进程ID,将会导致"invalid pid num"错误。在这种情况下,需要找到并停止正在运行的进程,或者将Nginx配置文件中的pid文件路径更改为另一个可用的位置。 综上所述,"nginx: [error] invalid pid num"错误通常是由于pid文件无效或不可读取而导致的。通过检查文件权限、磁盘空间和是否有其他进程占用相同的进程ID等方面,可以解决这个问题,确保Nginx能够正常启动和运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值