getpid on libc
へんなことに気がついた。
#include <unistd.h> static const int REPEAT = 100; int main() { int i; for (i = 0; i < REPEAT; i++) { getpid(); getpgid(); } return 0; }
% gcc -O0 -o test test.c % strace -c -egetpid,getpgid ./test Process 9039 detached % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 100.00 0.001302 13 100 100 getpgid 0.00 0.000000 0 1 getpid ------ ----------- ----------- --------- --------- ---------------- 100.00 0.001302 101 100 total
getpgid は 100 回呼ばれているけど、getpid は 1 回しか呼ばれてない。
getpid の結果 libc 内部で cache してある感じかなぁ。まぁ、変化することはないはずだからな。
追記
getppid に直して再測定。
#include <unistd.h> static const int REPEAT = 100; int main() { int i; for (i = 0; i < REPEAT; i++) { getpid(); getppid(); } return 0; }
% gcc -O0 -Wall -Wextra -o test % strace -c -egetpid,getppid ./test Process 7039 detached % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 100.00 0.000356 4 100 getppid 0.00 0.000000 0 1 getpid ------ ----------- ----------- --------- --------- ---------------- 100.00 0.000356 101 total