有没有一种方法可以通过“ ps”中的几种条件进行选择?


12

似乎我遗漏了一些显而易见的东西,但是仍然:

ps -f -u myuser --ppid 1

似乎只看一下进程的父pid,并返回所有父pid为1的进程,即使用户不是myuser

-u单独工作正常(仅选择处理的myuser):

ps -f -u myuser

我想念什么?是否有一些内置方法可以根据中的多个条件进行过滤ps

编辑: 我当前的解决方法:

ps -f -p $(join <(ps h --ppid 1 -o pid | sort) <(ps h -u myuser -o pid | sort))

Answers:


12

ps那样烦人。幸运的是,有pgrep,它具有相似的选择选项,但要求它们全部匹配,然后输出匹配的pid。默认情况下,它每行输出一个,但是可以要求使用不同的定界符,以便与ps

ps -f -p"$(pgrep -d, -u $USER -P 1)"

4

不幸的是ps只能取消选择,似乎没有and运算符或没有添加精炼的能力。

您可以寻求的帮助pgrep来获取PID列表并将其提供给ps。例如:

$ ps -f $(pgrep -P 1 -u saml)
UID        PID  PPID  C STIME TTY      STAT   TIME CMD
saml      1986     1  0 Jul25 ?        SLl    0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
saml      2003     1  0 Jul25 ?        S      0:00 dbus-launch --sh-syntax --exit-with-session
saml      2004     1  0 Jul25 ?        Ss     0:23 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
saml      2147     1  0 Jul25 ?        S      0:04 /usr/libexec/gconfd-2
saml      2156     1  0 Jul25 ?        Ssl    0:09 /usr/libexec/gnome-settings-daemon
saml      2162     1  0 Jul25 ?        S      0:00 /usr/libexec/gvfsd
saml      2178     1  0 Jul25 ?        Ssl    0:01 /usr/bin/pulseaudio --start --log-target=syslog
saml      2180     1  0 Jul25 ?        Ssl    0:04 /usr/libexec//gvfs-fuse-daemon /home/saml/.gvfs
saml      2191     1  0 Jul25 ?        S      0:12 syndaemon -i 0.5 -k
saml      2193     1  0 Jul25 ?        S      0:00 /usr/libexec/gvfs-gdu-volume-monitor

2

ps没有非常灵活的过滤器。使它显示超出所需的内容,显式指定格式,然后过滤输出。Awk通常可以很好地完成此任务。

ps -o pid= -o ppid= -o user= -o comm= -o args= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid'

列名后的等号取消标题行。如果要查看标题行,请使过滤器不变地打印出第一行:

ps -o pid -o ppid -o user -o comm -o args |
awk -v uid="$(id -un myuser)" 'NR == 1 || ($2 == 1 && $3 == uid)'

如果要进行一些自动化处理,则只需要将数据剥离为PID。

ps -o pid= -o ppid= -o user= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid {print $1}'

0

我必须检查我的批处理启动的PID,所以我必须检查PID和PPID,这个grep对我来说更有用:

grep -c $$ /proc/CHILDPID/stat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.