如何在 ps 中对两个选择条件进行逻辑与?

如何在 ps 中对两个选择条件进行逻辑与?

我正在模拟不带参数的默认行为ps

  • 选择条件之一是找到控制终端与当前 shell 相同的进程。

  • 另一个选择条件是找到euid为当前用户的进程。

所以我需要对用户和终端的选择进行逻辑与。

$ ps  -u t -t /dev/pts/4 -o pid,tname,time,ucmd   
$ ps  -u t -t pts/4 -o pid,tname,time,ucmd   
$ ps  -u t -t /dev/tty -o pid,tname,time,ucmd 

我知道当前 shell 的控制终端是/dev/pts/4.但所有这些都给了我带有其他控制终端和不带控制终端的进程。谢谢。

答案1

进程选择是通过-u和累积的-t:您将选择以用户 身份运行的所有进程t,以及最重要的是具有控制终端/dev/pts/4或 的所有进程/dev/tty。要查看给定控制终端的进程,请-t单独使用:

ps -t pts/4 -o pid,tname,time,ucmd

作为由 POSIX 指定,过程选择选项是附加的:

除了-F,-l,-n 名单, 和-o 格式,显示的所有选项都用于选择进程。如果指定了任何内容,则默认列表将被忽略并且附注应选择由所有选择标准选项的“或”表示的过程。

要组合条件,仅列出与所有条件匹配的进程,您可以使用pgrep

ps -p $(pgrep -d, -u t -t pts/4) -o pid,tname,time,ucmd

相关内容