쉘에서 명령을 실행했는데
cat >my1.fifo &
PID를 찾으려고 할 때 아래에 표시되지 않습니다.
ps -ef | grep my1.fifo
답변1
리디렉션은 실행 전에 쉘에 의해 수행됩니다 cat
. 이 같은:
(
exec >my1.fifo
exec cat
) &
보시다시피 cat
명령줄 인수 없이 실행되지만 표준 출력은 열린 파일에 연결됩니다. 무엇을 쓰고 있는지 거의 알지 못합니다(물론 파일 이름도 모릅니다).
답변2
cat
다음과 같이 실행하면 pid를 찾을 수 없습니다.
cat >my1.fifo &
이유는 간단합니다. cat
일단 표준 입력이 닫히면 표준 입력 읽기가 완료되어야 합니다. 명령을 백그라운드로 푸시하면( &
마지막으로) 시작 프로세스의 표준 입력이 닫힙니다.
즉, 명령이 cat >my1.fifo &
백그라운드로 이동하여 즉시 완료됩니다. 따라서 ps
후속 조치가 없습니다. 찾을 것이 없습니다.
프로세스의 pid가 무엇인지 알고 싶다면 다음을 수행하십시오. 그러면 echo $!
백그라운드로 전송된 마지막 프로세스의 pid가 인쇄됩니다. 물론 프로세스 목록에서 더 이상 이 pid를 찾을 수 없습니다(완료되었습니다).
그러나 예를 들어 다른 것을 사용한다면 프로세스 목록에서 해당 항목을 찾아 해당 pid를 표시 tail -f somefile >my1.fifo &
할 수 있습니다 .tail
echo $!