bash ps 打印名称为进程的信息

bash ps print info about process with name

我需要使用 ps 个具有键入名称的进程来打印 UID PID PPID PRI NI VSZ RSS STAT TTY TIME 列。

  GNU nano 2.0.6                                                     
  File: file2                                                                                                                        

  ps o uid,pid,ppid,ni,vsz,rss,stat,tty,time | grep   > 
  cat 
  echo "enter pid of process to kill:"
  read pid
  kill -9 $pid

但是当我使用带有参数 $2 = bash 的命令时它什么也不打印(这个过程存在)

更新

  GNU nano 2.0.6                               
  File: file2  

ps o uid,pid,ppid,ni,vsz,rss,stat,tty,time,command | grep  | awk '{print ,,,,,,,,}'  > 
cat 
echo "enter pid of process to kill:"
read pid
kill -9 $pid

这对我有用,但恕我直言,实际上这个解决方案并不是最好的。我使用 shadow column 命令,在 grep 名称之后打印所有列,不包括命令。

您始终可以使用两阶段方法。

1.) 找到想要的 PID。为此使用最简单的 ps

ps -o pid,comm | grep "" | cut -f1 -d' '

ps -o pid,comm 只打印两列,如:

67676 -bash
71548 -bash
71995 -bash
72219 man
72220 sh
72221 sh
72225 sh
72227 /usr/bin/less
74364 -bash

所以 grepping 很容易(而且 无噪音,没有误触发)。 cut 只是提取 PID。例如。

ps -o pid,comm | grep bash | cut -f1 -d' '

打印

67676
71548
71995
74364

2.) 现在你可以使用 -p 标志将找到的 PIDs 提供给另一个 ps,所以完整的命令是:

ps -o uid,pid,ppid,ni,vsz,rss,stat,tty,time,command -p $(ps -o pid,comm | grep bash | cut -f1 -d' ')

产出

  UID   PID  PPID NI      VSZ    RSS STAT TTY           TIME COMMAND
  501 67676 67675  0  2499876   7212 S+   ttys000    0:00.04 -bash
  501 71548 71547  0  2500900   8080 S    ttys001    0:01.81 -bash
  501 71995 71994  0  2457892   3616 S    ttys002    0:00.04 -bash
  501 74364 74363  0  2466084   7176 S+   ttys003    0:00.06 -bash

例如使用 </code> 的解决方案是 </p> <pre><code>ps -o uid,pid,ppid,ni,vsz,rss,stat,tty,time,command -p $(ps -o pid,comm | grep "" | cut -f1 -d' ')