2010-01-30 10 views
3

Quand mon programme arrive à cette ligne:X renvoie les erreurs lorsque forkpty est appelé. (C++)

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

Sorties ceci:

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. 

et se termine. Comme vous pouvez le voir, j'essaie de faire un pty pour lancer des trucs, mais ça ne marche pas.

De même, y a-t-il un moyen d'appeler forkpty() dans une classe? (J'ai essayé dans les deux sens, mais ni travaillé.)

Je suis en train de programmer en QT C++ sur Ubuntu 9.10.

EDIT: Here's un lien vers la question avec le code qui a finalement fonctionné pour moi.

Répondre

1

forkpty() forke votre processus. Vous devez d'abord fermer les filedescriptors, en particulier la connexion au serveur X dans votre processus fils. Cela signifie que vous ne pouvez probablement pas utiliser forkpty, mais devez utiliser openpty(), fork(), fermer les fichiers de texte dans le processus fils, logintty /()

+0

N'est-ce pas ce que 'O_CLOEXEC' est pour? – ephemient

+0

Si vous exec() un nouveau programme, oui. Dans ce cas, il n'y a que fork(). – nos

+0

Oh. D'une façon ou d'une autre, je pensais que 'forkpty()' avait un 'exec' final, mais non, bien sûr que non ... – ephemient