Comment puis-je obtenir tcsetpgrp() pour travailler en C?

Je suis en train de donner à un enfant (au moyen d' fork()) de premier plan de l'accès au terminal.

Après je fork(), je exécutez le code suivant dans le processus de l'enfant:

setpgid(0, 0);

Et:

setpgid(child, child);

Dans le processus parent.

Cela donne à l'enfant son propre groupe de processus. L'appel à setpgid() fonctionne correctement.

Maintenant, je veux donner à l'enfant l'accès au terminal.

J'ai ajouté ce qui suit à l'enfant après la setpgid() appel:

if (!tcsetpgrp(STDIN_FILENO, getpid())) {
    perror("tcsetpgrp failed");
}

Après cela, il y a un execv() commande à lancer /usr/bin/nano.

Cependant, au lieu d'avoir nano venir, rien ne se passe, et le terminal semble comme si elle attendait la saisie de l'utilisateur.

De plus, le code ne semble s'exécuter après la tcsetpgrp() appel.

J'ai lu quelque part que j'ai besoin d'envoyer un SIGCONT signal pour le processus de l'enfant pour le faire fonctionner. Si le processus est arrêté, comment puis-je le faire? Le parent d'envoyer le signal?

Comment puis-je faire au sujet de l'envoi de la SIGCONT signal si c'est la solution?

raise(SIGCONT);

Aussi, je ne suis pas sûr si cela aide, mais le code fonctionne et génère nano si je lance mon programme avec:

exec ./program

Au lieu de:

./program

Des idées? Merci beaucoup!

  • Animateur de la séance (lire: shell) doit appeler tcsetpgrp()
InformationsquelleAutor John Kurlak | 2011-03-17