추신 명령 및 grep


8

프로세스 목록에 명령 이 ps -ef | grep $$표시되는 이유는 무엇 grep입니까? 가 그의 작업을 마친 grep후에 처형 되지 ps않습니까?


파이프 라인이라고합니다.
Ipor Sircer

첫 번째 명령이 끝날 때까지 기다렸다면 파이프 라인은 tail -f filename | grep pattern?
Barmar

답변:


11

파이핑 명령을 수행하면 모든 프로세스가 동시에 시작되며 I / O가 프로세스를 시작 / 종료 할 때까지 대기 (차단)됩니다. 쉘은 출력을 버퍼링하지 않으며 한 프로세스가 완료 될 때까지 보류 한 다음 다른 프로세스로 전송합니다.

예를 들면 다음과 같습니다.

mtak@rubiks:~$ tar -zcvf test.tgz /lib/ | grep bla | grep foo | grep bar

결과 :

mtak 28813 28799  0 12:35 pts/17   00:00:00 tar -zcvf test.tgz /lib/
mtak 28814 28799  0 12:35 pts/17   00:00:00 grep --color=auto bla
mtak 28815 28799  0 12:35 pts/17   00:00:00 grep --color=auto foo
mtak 28816 28799  0 12:35 pts/17   00:00:00 grep --color=auto bar

/ proc 트리에서 grep 프로세스의 상태를 확인할 수 있습니다.

mtak@rubiks:~$ grep State /proc/28814/status
State:  S (sleeping)

또한 두 grep이 동일한 파이프 라인 (id 57573438) 1에 연결되어 있고 첫 번째 프로세스 의 STDOUT ( )이 두 번째 프로세스의 STDIN ( 0)에 연결되어 있음을 알 수 있습니다.

root@rubiks:~# ls -l /proc/28815/fd
total 0
lr-x------ 1 mtak mtak 64 dec  1 12:35 0 -> pipe:[57573437]
l-wx------ 1 mtak mtak 64 dec  1 12:35 1 -> pipe:[57573438]
lrwx------ 1 mtak mtak 64 dec  1 12:35 2 -> /dev/pts/17

root@rubiks:~# ls -l /proc/28816/fd
total 0
lr-x------ 1 mtak mtak 64 dec  1 12:35 0 -> pipe:[57573438]
lrwx------ 1 mtak mtak 64 dec  1 12:35 1 -> /dev/pts/17
lrwx------ 1 mtak mtak 64 dec  1 12:35 2 -> /dev/pts/17

그것은 그들이 잠
들었다고 말한

시스템에 둘러 볼 수 있도록 잠자기 명령을 넣어서 약간의 지연을 도입했습니다. grep이 입력을받지 않는 것을 제외하고는 sleep 명령은 grep 뒤에 영향을 미치지 않습니다. 그것이 당신을 행복하게한다면, tar : $ tar -zcvf test.tgz /lib/ | grep foo | grep bar와 같은 일을 하고 grep을 점검하십시오 :$ cat status Name: grep State: S (sleeping)
mtak

이미 편집 했으므로 더 명확합니다.
mtak
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.