나는 맹목적으로 명백한 것을 놓치고있는 것 같지만 여전히 :
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))
답변
ps
그런 식으로 성가신입니다. 다행히도 pgrep
비슷한 선택 옵션이 있지만 모두 일치해야하고 일치하는 pid를 출력해야합니다. 기본적으로 한 줄에 하나씩 출력하지만 다른 구분 기호를 사용하여 다음과 ps
같이 작동하도록 요청할 수 있습니다 .
ps -f -p"$(pgrep -d, -u $USER -P 1)"
답변
불행히도 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
답변
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}'
답변
내 배치에서 PID가 시작되었는지 확인해야하므로 PID와 PPID를 확인해야했습니다.이 grep은 나에게 더 유용했습니다.
grep -c $$ /proc/CHILDPID/stat