2014-10-15 5 views
0

popen()에 의해 C 프로그램에서 '플루트'(멀티 캐스트 트래픽 전송 프로토콜) 응용 프로그램/바이너리 (다운로드 한 버전)를 실행하고 있습니다. 이 응용 프로그램은 셸을 사용하여 일부 명령을 수행하기 때문에 백그라운드에서 실행되지 않는 기능/버그가 있습니다. 그리고 실행 중에 응용 프로그램이 셸을 잠급니다. 즉, 쉘에 미리 정의 된 문자 만 입력 할 수 있음을 의미합니다. 그렇지 않으면 끝까지 기다려야합니다. 따라서 C 코드에서 popen()을 사용하여 응용 프로그램의 여러 인스턴스를 실행하면 셸이 영구적으로 정지됩니다. 왜냐하면 두 응용 프로그램이 동시에 사용하려고하기 때문입니다 (가정). 하지만 다른 셸에서 여러 인스턴스를 수동으로 실행할 수 있습니다. 다음은 C 프로그램에서 실행하는 샘플 코드입니다.응용 프로그램의 여러 인스턴스를 실행할 때 Linux 쉘이 멈 춥니 다

FILE* pF = popen("./flute -send -a226.0.0.1/6789 /media/song.mp3", "r"); 

셸이 끊어지지 않는 솔루션이 있습니까? 도와주세요. 프로세스가 그것이 당신의 pF에 프롬프트를 썼다 때문에 단지 걸려 지금 상속 된 표준 입력에서 읽고 차단 된 경우

답변

1

, 당신은 할 수 :

  • 은 그래서에 나타 stdoutpF에서 프롬프트 읽기 전달 터미널을 입력하면
  • 또는 수동으로 fork을 입력하고 stdinstdout을 가로채는 것을 알 수 있습니다. 그러면 사용자의 터미널에 프롬프트가 표시되지 않고 프로그램에서 프로그래밍 방식으로 "미리 정의 된 문자"를 보낼 수 있습니다

상속 된 터미널에서 실제로 처리하고 있기 때문에 프로세스가 멈추는 경우 각 자식 프로세스에 대해 의사 터미널을 만들 수 있으므로 동일한 제어 터미널을 사용하지 않아도됩니다. 참고로 this question을 참조하십시오.

+0

답변 해 주셔서 감사합니다. 첫 번째 요점을 조금만 설명 할 수 있습니까? 나는 그것을 제대로 이해할 수 없었다. – JatiA

+0

당신의 popen'FILE *'에서 자식 프로세스의 결과를 읽고'stdout'에 무엇이든지 쓴다. 그런 다음 터미널에서 자식 프로세스가 무엇을하는지 (또는 묻고 있는지) 확인할 수 있습니다. – Useless