> strace w 2>&1 | grep urandom
read(4, "/usr/bin/grep\0urandom\0", 2047) = 22
>
"w"에 우랜덤이 필요한 이유는 무엇입니까? 이 상황을 피하는 방법은 무엇입니까?
고쳐 쓰다:
> strace w 2>&1 | awk '/urandom/'
read(4, "awk\0/urandom/\0", 2047) = 14
>
그렇다면 필터링은 우랜덤과 관련이 있나요?
> strace who 2>&1 | grep urandom
>
그렇다면 왜 "누가"는 영향을 받지 않습니까?
답변1
승현재 컴퓨터의 사용자에 대한 정보를 표시합니다.그리고 그들의 프로세스
사용자의 프로세스를 표시하기 위해 컴퓨터에서 실행되는 모든 프로세스를 거칩니다. 이것을 시도해 봅시다:
$ strace -o w.trace w | grep whatever
추적에서 다음과 같은 줄을 찾습니다(Linux 시스템에서).
open("/proc/8286/cmdline", O_RDONLY) = 4
read(4, "grep\0whatever\0", 2047) = 14
모든 프로세스(표시되지 않음)를 w
명시적으로 찾아보고 볼 수 있는 명령줄을 보여줍니다 . /proc
그것은 grep
그것과 평행한 어떤 것을 발견하고, 그것이 바로 strace
그것이 하는 일입니다. 파이프는 동시에 두 프로세스를 시작하는 것 외에는 아무 관련이 없습니다. 어떤 면에서는 grep 자체를 보는 것과 비슷합니다 ps | grep
.
who
대부분의 다른 명령은 프로세스에 대한 정보가 필요하지 않고 프로세스를 찾지도 않으므로 추적할 때 동일한 정보를 볼 수 없습니다.
답변2
다른 답변과 의견에서 설명했듯이 관찰 이유는 Bash
파이프가 처리되는 방식입니다. 비슷한 상황에서 실제로 원하는 것을 필터링하려면 다음 grep
과 같이 매개변수의 첫 글자를 묶어볼 수 있습니다 []
.
$ strace w 2>&1 | grep random
read(4, "grep\0random\0", 2047) = 12
$ strace w 2>&1 | grep '[r]andom'
$ strace w 2>&1 | grep '[c]lose'
close(3) = 0
close(3) = 0
close(3) = 0
close(3) = 0
close(3) = 0
close(3) = 0
(...)
편집하다:
올바르게 지적했듯이아르 자형.내부에아래 댓글실제로 strace
파이프 반대편은 보이지 않습니다. 출력에도 표시된 것과 유사하게 ps aux | grep grep
디렉토리를 탐색하고 거기에서 프로세스를 찾습니다.grep grep
w
/proc
grep