首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ps输出中排除ps本身

从ps输出中排除ps本身
EN

Unix & Linux用户
提问于 2023-04-22 17:51:03
回答 4查看 958关注 0票数 6

我想获得系统中除ps进程本身以外的所有进程的信息。

也就是说,就像:

代码语言:javascript
复制
ps --no-headers --pid 1111 -N

其中1111是当前运行的ps命令的进程id。

我试过

代码语言:javascript
复制
ps --no-headers --ppid $ -N

但是,当<#>not在“子进程”中运行时(如:

代码语言:javascript
复制
IFS=' ' read pctd proc <<<$(/bin/ps --no-headers --ppid $ -No pcpu,pid,comm --sort=+pcpu | tail -n 1)

最后一个命令尝试使用“最近”获得CPU使用率和进程id加上进程名称。

代码语言:javascript
复制
IFS=' ' read pctd proc <<<$(/bin/ps --no-headers -eo pcpu,pid,comm --sort=+pcpu | tail -1)

直到最近工作还不错。然而,更新到Ubuntu23.04(或内核6.x)之后ps刚开始sometimes将自己列出为使用100% CPU.

就目前而言,以下几点似乎是一种解决办法(但并不安全):

代码语言:javascript
复制
IFS=' ' read pctd proc <<<$(/bin/ps --no-headers -eo pcpu,pid,comm --sort=+pcpu | grep -v \ ps | tail -1)
EN

回答 4

Unix & Linux用户

回答已采纳

发布于 2023-04-22 19:28:51

要排除ps本身,请执行以下操作:

代码语言:javascript
复制
sh -c 'exec ps --no-headers --pid "$" -N'

sh用它自己的PID替换了$,但是它用ps代替了自己。PID不改变,这就是exec的工作方式。这样,ps就可以接收它自己的PID作为--pid的选项参数。

注意,此方法不包括ps本身,但不包括其他ps进程(如果有的话)。

票数 13
EN

Unix & Linux用户

发布于 2023-04-23 11:24:29

作为对如何为自身删除ps条目的概括,特别是对于不支持非标准-N/--deselect选项的ps实现,一种常见的方法是:

代码语言:javascript
复制
print_pid_and_run() {
  sh -c 'echo "$" && exec "$@"' sh
}
print_pid_and_run ps ...ps-options... |
  awk 'NR == 1 {pid = $0; next}
       $1 != pid'

(根据传递给$1的选项,使用在ps输出中包含进程pid的实际字段更改ps)。

在zsh中,通过执行以下操作可以避免运行sh

代码语言:javascript
复制
zmodload zsh/system
print_pid_and_run() (echo $sysparams[pid] && exec "$@")

在巴什:

代码语言:javascript
复制
print_pid_and_run() (echo "$BASHPID" && exec "$@")

(请记住,在bash中,与上面的zsh相反,不能用于运行内置程序或函数)。

票数 3
EN

Unix & Linux用户

发布于 2023-04-22 18:15:32

像这样,使用awk筛选器丢弃ps

代码语言:javascript
复制
$ read pctd pid proc < <(
    ps --no-headers -eo pcpu,pid,comm |
        awk '$1>=max && $3!="ps"{max=$1; val=$0}END{print val}'
)

$ echo $pctd 
11.1
$ echo $pid
1234
$ echo $proc 
process-name

更可靠的方法,是使用top

代码语言:javascript
复制
top -b -n1 | awk '/ PID /{p=1;next} p && !/top/{print $9, $12;exit}'
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/743701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档