2014-10-20 3 views
-2

나는 기본적으로 쉘이 사용자로부터 입력을받는 C 프로그램의 응용 프로그램/바이너리를 가지고있다. 따라서, 백그라운드에서 응용 프로그램을 시작할 때 &을 사용하면 자동으로 멈 춥니 다. 왜냐하면 내가 액세스 할 수없는 구현이 있기 때문입니다. 이 코드를쉘을 사용하는 백그라운드에서 리눅스 응용 프로그램을 실행하는 방법은 무엇입니까?

iStatus = system("./flute-static -send -a232.0.0.1/6666 a.txt &"); 

을 실행하면 그것은 출력 [1] 21970, PID를 제공합니다. 나는 다른 입력 누르면

는 다음에, 출력을

[1]+ Stopped     ./flute-static -send -a232.0.0.1/6666 a.txt 

를 제공하고 분명히 데이터를 전송하는 데 실패합니다. 문제를 어떻게 해결할 수 있습니까? 도와주세요. 미리 감사드립니다.

+1

도 전경에서 (&없이) 프로세스를 시작한 다음 자격 증명을 입력 한 후 백그라운드로 보낼 수 있습니다 (bash : ctrl-z를 입력하고 bg 다음에 return을 입력하십시오). 하지만 이것은 프로그래밍 문제가 아닙니다 ... – sergio

+2

이것은 프로그래밍 문제가 아니며 [unix] (http://unix.stackexchange.com/) 사이트에 속합니다. 그러나 대답은 아마 당신이 이해하지 못하는 무언가를하려한다는 것입니다 - 프로그램이 표준 입력을 읽어야 할 필요가 있다면 그 입력을 제공하는 무언가에 stdin을 붙일 필요가 있습니다. – geoffspear

+0

오해해서 죄송합니다. 사실 저는 system() 함수를 사용하여 c 프로그램에서 실행하고 있습니다. 나는 그 질문을 수정했다. @ 수르지오 지금 나를 도울 수 있니? – JatiA

답변

1

당신은 nohup을 의미 nohup

iStatus = system("nohup ./flute-static -send -a232.0.0.1/6666 a.txt &"); 

시도 할 수 있습니다 다음은 stty이 차단 된 경우에도이 프로세스를 종료하지 않습니다.

또는 당신은 screen

https://www.mattcutts.com/blog/a-quick-tutorial-on-screen/

+0

감사합니다. 시도했지만 다음과 같은 오류가 발생했습니다. "[2] - exit 255 nohup ./flute-static -send -a232.0.0.1/6666 JFlute.1.2.tar.gz". – JatiA

0

읽기 Advanced Linux Programming 사용할 수에 대한 fork system call; fork(2), execve(2), waitpid(2)과 다른 syscalls(2) 및/또는 아마도 daemon(3) 및/또는 popen(3)을 사용하고 싶습니다. 아마도 을 flute-static 프로그램에 사용하면 더 많은 정보를 얻을 수 있습니다.

는, BTW, 당신은 (! 소스 코드에서 MAD-ALCLIB 컴파일) 일부 FLUTE library가 사용할 수있는, 또는 단순히 당신이하는 백그라운드로 프로세스가 표준 입력을 읽고 않는 경우에 무엇이든 libcurl

같은 HTTP & FTP 클라이언트 라이브러리를 사용 정지됩니다 (signal(7), tty(4) 등 참조)! tty demystified

+0

감사합니다. 필자는 플루트 프로토콜을 사용해야하며 제공된 링크에서 사용할 수있는 이진 파일은 fedora 19에서 작동하지 않습니다. 다른 이진 파일을 사용하고 있습니다. 그리고 첫 번째 요점을 조금 설명하면 도움이 될 것입니다. – JatiA

+0

참조를 읽으려면 몇 시간이 걸릴 필요가 있습니다. 나는 많은 책과 자원에서 매우 잘 설명되는 것을 당신에게 설명하기 위해 많은 시간 (수 시간 또는 며칠)이 필요하지 않습니다. –

관련 문제