2010-01-30 8 views
3
내 프로그램이 선에 도달

:forkpty가 호출되면 X가 오류를 발생시킵니다. (C++)

pid_t nPid = forkpty(&m_nMasterFD, NULL, NULL, NULL); 

출력이 :

X Error: BadIDChoice (invalid resource ID chosen for this connection) 14 
    Extension: 148 (RENDER) 
    Minor opcode: 17 (RenderCreateGlyphSet) 
    Resource id: 0x3600002 
<unknown>: Fatal IO error 4 (Interrupted system call) on X server :0.0. 

그리고 종료합니다. 보시다시피, 나는 물건을 넣을 수있는 pty를 만들려고 노력하고 있지만 작동하지 않습니다.

또한 클래스 내에 forkpty()을 호출 할 수있는 방법이 있습니까? (두 가지 방법을 모두 시도했지만 작동하지 않았습니다.)

우분투 9.10에서 QT C++로 프로그래밍하고 있습니다.

편집 : Here's 마침내 나를 위해 일한 코드로 질문에 대한 링크.

답변

1

forkpty()가 프로세스를 포크합니다. 당신은 먼저 filedescriptors, 특히 당신의 자식 프로세스에서 X 서버에 대한 연결을 닫을 필요가있다. 즉, forkpty를 사용할 수는 없지만 openpty(), fork(), 자식 프로세스 logintty /()에서 filedescriptors를 닫아야 함을 의미합니다.

+0

'O_CLOEXEC'은 무엇입니까? – ephemient

+0

새 프로그램을 exec()하면 yes입니다. 이 경우에는 fork() 만 있습니다. – nos

+0

오. 어쨌든 나는'forkpty()'에 마지막으로'exec'가 있다고 생각했지만, 그렇지 않습니다. 물론 ... – ephemient

관련 문제