/usr/bin/gssproxy에서 파이프하는 동안 Cat이 차단됩니다(`timeout -k 1 1 /usr/bin/gssproxy | cat`은 종료되지 않음).

/usr/bin/gssproxy에서 파이프하는 동안 Cat이 차단됩니다(`timeout -k 1 1 /usr/bin/gssproxy | cat`은 종료되지 않음).

gssproxy특히 Arch Linux에서 사용하고 있습니다 .

Name            : gssproxy
Version         : 0.8.0-1

/usr/bin/gssproxy 다음과 같은 동작이 발생했습니다. 이와 같이 출력을 파이프하려고 할 때

/usr/bin/gssproxy | cat

차단됩니다. 그러나 이 명령을 실행하면 /usr/bin/gssproxy차단되지 않고 백그라운드에서 다른 프로세스가 생성됩니다.

root 13720 0.0 0.0 59732 584 ? Ssl 11:44 0:00 /usr/bin/gssproxy

그리고 존재합니다.

파이프되는 출력이 의미가 없을 수도 있다는 데 동의 gssproxy하지만, 이 동작이 발생하는 이유를 알고 싶습니다. 특히 cat막힘의 원인은 무엇입니까?

편집하다:

차단이란 다음 명령을 의미합니다.

timeout -k 1 1 /usr/bin/gssproxy | cat,

종료하지 않고 동시에

timeout -k 1 1 /usr/bin/gssproxy

즉시 종료하십시오. 두 명령 모두 gssproxy백그라운드에서 프로세스를 생성합니다. 왜 첫 번째 명령이 예상한 대로 1초 후에 종료되지 않는지 궁금합니다.

답변1

@Kusalananda가 언급했듯이 gssproxy데몬 프로세스로 실행되면 상위 프로세스는 하위 프로세스가 종료될 때까지 기다릴 수 있습니다.

다음은 동일한 상황을 시뮬레이션하는 짧은 쉘 스크립트입니다.

$ cat t1
#!/bin/bash
sleep 10 &

$ date; ./t1 | cat ; date
Sun Apr  7 10:59:02 BST 2019
Sun Apr  7 10:59:12 BST 2019

date 명령은 순전히 cat이 종료된 후(10초) 하위 프로세스가 존재함을 표시하기 위한 것입니다.

관련 정보