에 따르면 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 PID
ps -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