Récupérer le pid lors d'un double fork()

tinram Messages postés 1 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 27 décembre 2008 - 27 déc. 2008 à 23:20
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 - 31 déc. 2008 à 11:26
Bonjour,

    J'écris une interface graphique pour controler jack, un serveur de son sous nux, et j'ai un ptit problème. Pour lancer jack, je passe par un double fork() pour éviter les zombie quand je tue le processus plus tard. Cependant je n'arrive pas a récupérer le pid du jack que j'ai lancer puisque ce pid est déclarer dans le premier fils que j'ai lancer (jack est lancer dans le deuxième évidement). Voici la méthode que j'ai écrite :

bool
JackDriver::start_up_server(std::string path, std::string command)
{
    while (command.find(" ") == 0) {
        command = command.substr(1);
    }
    std::string argv = command.substr(command.find(" ") + 1);

    const pid_t fork_error = vfork ();

    if (fork_error == 0) {
        pid_t jack_pid;

        struct rlimit max_fds;
        getrlimit (RLIMIT_NOFILE, &max_fds);

        for (rlim_t fd = 3; fd < max_fds.rlim_cur; ++fd) {
            close (fd);
        }

        jack_pid = fork ();

        if (jack_pid == 0) {
            setsid ();
            execl (path.c_str(), argv.c_str(), NULL);
            _exit (-1);
        } else {
            _exit (0);
        }
    } else {
        if (fork_error < 0) {
            std::cout << "Unable to fork() ..." << std::endl;

            return false;
        }
    }

    _mutex->lock();
    _pid = jack_pid;
    _mutex->unlock();
    std::cout << _pid << std::endl;

    return true;
}

Comme le premier fils et mon programme ne partage plus le même espace mémoire, _pid = jack_pid; ne fonctionne pas ...

Je cherhce une solution sans passer par un fichier temporaire ou tout autre chose d'externe, enfin ci c'est possible...

Merci d'avance

PS: la solution est peu être très simple mais je débute en C alors ...

2 réponses

ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
28 déc. 2008 à 00:16
C'est que une idée, mais tu peux creer un tube (pipe) entre ton fils et ton pere et du transmet par le pipe le pid du "sous fils".
Je suis pas sur que ca fonctionne mais je pense que oui.

<hr />www.e-fitz.com
Encore plus de sources et de tutoriels.
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
31 déc. 2008 à 11:26
Deplace dans le forum C++ :)
0
Rejoignez-nous