2013-01-22 3 views
3

백그라운드에서 프로세스를 실행하고 필요할 때만 출력을받는 가장 좋은 방법은 무엇입니까?백그라운드 프로세스의 출력을 캡처하는 방법은 무엇입니까?

의도 된 사용 : 무거운 초기화로 프롬프트를 출력하는 스크립트를 각 프롬프트 실행이 아닌 세션마다 한 번 초기화하십시오. 주 : 양방향 통신이 필요합니다. 쉘은 새로운 프롬프트가 필요할 때를 알 필요가 있습니다. 마지막 명령 상태는 무엇입니까?

알려진 솔루션 :

  • 파일 시스템의 일부를 명시 적으로 생성 된 파일

    (FIFO 파일, UNIX 소켓) :이 나는 그것이 garbage-입니다 확인, 파일 이름을 선택해야 의미로이 문제를 피하기 위해 더 나은 것 출구에서 수집하고 충돌시 더 이상 사용하지 않는 파일을 정리하기 위해 무언가를 추가하십시오.
  • zsh/zpty 모듈 :이 작업에는 잔인한 행동이며 bash에서는 작동하지 않습니다.
  • coprocesses : bash에서는 작동하지 않으며 AFAIK는 세션 당 하나의 코 프로세스 만 허용됩니다.

답변

1

Bash는 코 프로세서 4.0을 지원하지만 복수 코 프로세서는 아직 실험 중입니다.

명시 적으로 만들어진 파일을 사용자 및 호스트별로 보려면 ~/.myThing-$HOSTNAME/fifo으로 지정하면됩니다. 당신은 명령이 여전히 실행중인 경우 상대적으로 쉽게 결정하기 위해 flock을 사용할 수 있으며 선택적으로 시작 :

(
    flock -n 123 || exit 1 
    rm/mkfifo .. 
    exec yourServer <..> .. 
) 123> ~/".myThing-$HOSTNAME/lockfile" 

을 명령이나 서버가 죽으면, 잠금이 자동으로 해제되고, 당신은 단지 주위에 거짓말을 제로 몇 가지 길이의 파일이 있습니다. 다음 번에 서버가 시작될 때 서버가 삭제되고 다시 설정됩니다.

서버를 쿼리하는 작업은 비슷하지만 잠김이 이 아니고 인 경우 (그리고 선택적으로 경합을 피하기 위해 대기 잠금을 사용하는 경우) 종료됩니다.

관련 문제