![如何在 ps 中对两个选择条件进行逻辑与?](https://linux22.com/image/143121/%E5%A6%82%E4%BD%95%E5%9C%A8%20ps%20%E4%B8%AD%E5%AF%B9%E4%B8%A4%E4%B8%AA%E9%80%89%E6%8B%A9%E6%9D%A1%E4%BB%B6%E8%BF%9B%E8%A1%8C%E9%80%BB%E8%BE%91%E4%B8%8E%EF%BC%9F.png)
我正在模拟不带参数的默认行为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