"host" 및 유사한 명령에 대한 프로세스 정보를 보는 방법

"host" 및 유사한 명령에 대한 프로세스 정보를 보는 방법

Ubuntu 시스템에서 현재 프로세스를 보는 방법을 알고 있습니다. 예를 들어, 하나를 실행 상태로 둘 수 있습니다 ping.

ping localhost

그런 다음 다음을 수행하십시오.

$ ps -ef | grep ping

이는 다음을 나타냅니다.

user1      2875    1231  0 Feb08 ?        00:00:03 /usr/libexec/gsd-housekeeping
user2     96834   43257  0 14:21 pts/4    00:00:00 ping localhost
root       96837   63560  0 14:21 pts/1    00:00:00 grep --color=auto ping

하지만 명령은 어떻습니까 host? 루프에서 실행하고 있습니다.

for i in {1..50000}; do host localhost; done

그런 다음 다음을 수행하십시오.

$ps aux | grep host

하지만 내가 얻는 것은 다음과 같습니다.

root       98021   63560  0 14:24 pts/1    00:00:00 grep --color=auto host

예, 루트로 시도해 보기도 했습니다! 물론 이름 확인자를 볼 수 있지만 항상 켜져 있습니다.

$ ps -ef | grep resolv
systemd+    1015       1  0 Feb08 ?        00:00:17 /lib/systemd/systemd-resolved

host나도 봐야 하지 않나 /usr/bin/host?

그건 그렇고, 똑같습니다 ls. 나는 이러한 명령이 약간 특별하고 "내장"되어 있다는 것을 알고 있지만 다른 프로세스처럼 취급될 것이라고 생각했습니다. cd실제 실행 파일 과 다릅니다 . 나는 달려갔다 strace:

execve("/usr/bin/host", ["host", "localhost"], 0x7ffdf51ee518 /* 58 vars */) = 0
brk(NULL)                               = 0x559cc809a000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffd20032c70) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
...

그것을 설명하는 어떤 것도 볼 수 없습니다. 내가 놓친 게 무엇입니까? ! 이해를 높이는 데 도움을 주셔서 감사합니다!

답변1

ping은 한 번 실행됩니다. 작업을 반복하기 위한 자체 내부 타이머가 있지만 동일한 프로세스는 횟수가 만료되거나 옵션에 따라 종료될 때까지 그대로 유지됩니다.

호스트는 내장 셸이 아닌 외부 명령이므로 하위 프로세스와는 아무런 관련이 없습니다. 하지만 완료하는 데 50,000번의 실행이 필요했습니다. 찾아 보면 ps | grep프로세스 테이블에 있을 확률은 약 1% 정도이다. 루프에서 ps도 실행하면 결국 몇 가지 적중이 표시될 수 있습니다. 두 개의 진단 프로세스를 실행할 때 특정 스케줄러 제한으로 인해 프로세스 생성이 hostps와 동기화되지 않을 수 있습니다 .

관련 정보