pgrep/pkill이 ps보다 훨씬 느린 이유는 무엇입니까? [폐쇄]

pgrep/pkill이 ps보다 훨씬 느린 이유는 무엇입니까? [폐쇄]

나는 이것이 pgrep이전보다 훨씬 빠를 것이라고 생각했지만 ps -ef정반대였습니다 . pgrep시간이 약 4배나 걸렸습니다. 하지만 내 노트북에서만 가능합니다. 예를 들면 다음과 같습니다.

$ time { ps -ef |grep foobar; }
real    0m0.027s
user    0m0.009s
sys 0m0.023s

비교:

$ time pgrep foobar
real    0m0.215s
user    0m0.189s
sys 0m0.021s

...위의 시간은 일반적인 작업을 나타냅니다.

문맥:

Linux 커널 5.6.19-200.fc31.x86_64를 실행하는 Intel i7 노트북입니다.

5.7.9-100.fc31.x86_64를 실행하는 다른 컴퓨터(서버)가 있고 pgrep거의 동일한 수의 프로세스(~260)로 약 10-12ms 내에 완료됩니다.

그냥 이상해요.

나는 이 노트북에서 커널 5.7.11을 사용해 보았지만 아무런 차이가 없었습니다. pgrep여전히 ps보다 약 4배 느립니다. 동일한 결과로 5.6.19로 재부팅했습니다. 콘솔 결과는 동일합니다.

내 라즈베리 파이-3b+(4코어) 및 Raspbian에서 pgrep속도는 ps보다 약 두 배 빠릅니다!

내 노트북에는 Intel i7, 8-Gb, 하이퍼 스레딩이 포함된 4코어가 있고 약 270개의 프로세스가 실행되고 있습니다.

서버는 i5, 8-Gb, 4코어이며 약 265개의 프로세스를 실행합니다.

파이는 1Gb, 4코어, ~133개 프로세스 실행

편집하다:kernel-5.9.16-100.fc32로 업그레이드했는데 지금은 pgrepps보다 3배만 느립니다!

편집 2:추가 정보. pgrep의 strace는 다음을 제공합니다.

     0.000089 openat(AT_FDCWD, "/proc/29/cmdline", O_RDONLY) = 4
     0.000071 read(4, "", 2047)         = 0
     0.000052 close(4)                  = 0
     0.503431 stat("/proc/30", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
     0.012402 openat(AT_FDCWD, "/proc/30/status", O_RDONLY) = 4
     0.002080 read(4, "Name:\tmigration/4\nUmask:\t0000\nSt"..., 2048) = 967
     0.000078 close(4)                  = 0

...그래서 프로세스에 대한 정보를 얻는 데 상당한 지연이 발생하고 있습니다. 자세한 과정이 나와있지 않아서 무슨 내용인지는 모르겠지만

관련 정보