`ps -p PID`는 `ps -q PID`가 수행하지 않는 정확히 무엇을 수행합니까?

`ps -p PID`는 `ps -q PID`가 수행하지 않는 정확히 무엇을 수행합니까?

에 따르면 man ps:

   -p pidlist
          Select by PID.  This selects the processes whose process ID
          numbers appear in pidlist.  Identical to p and --pid.

   -q pidlist
          Select by PID (quick mode).  This selects the processes
          whose process ID numbers appear in pidlist.  With this
          option ps reads the necessary info only for the pids listed
          in the pidlist and doesn't apply additional filtering
          rules. The order of pids is unsorted and preserved. No
          additional selection options, sorting and forest type
          listings are allowed in this mode.  Identical to q and
          --quick-pid.

나는 이것이 최대 4분의 1의 시간 안에 동일한 목록을 생성하는 것 -q보다 훨씬 빠르다는 것을 발견했습니다.-p

예를 들어:

$ time ps -fq "$$"
UID        PID  PPID  C STIME TTY          TIME CMD
vagrant   8115  3337  0 23:05 pts/0    00:00:00 bash

real    0m0.003s
user    0m0.001s
sys 0m0.002s
$ time ps -fp "$$"
UID        PID  PPID  C STIME TTY          TIME CMD
vagrant   8115  3337  0 23:05 pts/0    00:00:00 bash

real    0m0.013s
user    0m0.003s
sys 0m0.009s
$

ps -q다른 시스템에서는 시간이 10분의 1도 채 걸리지 않는 것으로 나타났습니다 ps -p.

그러나 포리스트 유형 목록을 사용하지 않고 단일 PID만 전달하므로 정렬에는 시간이 걸리지 않습니다(그리고 적당히 짧은 PID 목록의 경우 정렬은 무시할 수 있어야 합니다). 내 명령에는 추가 필터링 규칙이 없습니다.

ps -p그게 전부야 , ps -q그렇지?

답변1

제가 정확하게 답변드릴 수 있는 내용은 다음과 같습니다.ps -q PID하지 말아야 할 일은 정확히 무엇 입니까?

  • 주어진 프로세스 목록에서 트리를 정렬 및/또는 선택합니다.

~에서-q/q/--quick-pid 옵션 추가굵게 추가:

이 커밋에서는 "ps" 명령에 새로운 옵션 q/-q/--quick-pid가 도입되었습니다. 이 옵션은 p/-p/--pid 옵션과 유사하게 작동하지만(즉, 이 옵션 뒤의 쉼표로 구분된 목록에 나열된 PID를 선택합니다), 새 옵션은 속도에 최적화되어 있습니다. 사용자가 표시할 PID 목록만 지정하면 되고 다른 선택 옵션, 포리스트 유형 출력, 정렬 옵션이 필요하지 않은 경우 초기 처리 지연이 줄어들기 때문에 새로운 옵션을 권장합니다.시스템에서 실행되는 모든 프로세스에서 필요한 정보를 읽지 마십시오.그리고 내부 필터링 논리를 단순화합니다.

이 옵션은 빠르도록 설계되었습니다.

답변2

시스템의 모든 프로세스, 단 하나의 프로세스 에서만 정보를 읽는 데 사용하는 strace것을 확인했습니다 .ps -fp PIDps -fq PID

이는 다음 명령을 사용하여 확인할 수 있습니다.

sudo strace -o /tmp/strace.p.out ps -fp $$
sudo strace -o /tmp/strace.q.out ps -fq $$
ps -e | wc -l
grep -c '"/proc/[0-9]*"' /tmp/strace.{p,q}.out

관련 정보