begin process at 2012 05 30 06:46:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Autre

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

samedi 27 décembre 2008 à 23:20:37 | Récupérer le pid lors d'un double fork()

tinram

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 ...
dimanche 28 décembre 2008 à 00:16:44 | Re : Récupérer le pid lors d'un double fork()

ciberrique

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.


www.e-fitz.com
Encore plus de sources et de tutoriels.
mercredi 31 décembre 2008 à 11:26:06 | Re : Récupérer le pid lors d'un double fork()

sheorogath

Membre Club Administrateur CodeS-SourceS
Deplace dans le forum C++ :)


Cette discussion est classée dans : std, command, pid, fork, jack


Répondre à ce message

Sujets en rapport avec ce message

[C/Linux]problème de fork wait [ par rt15 ] Bonjour, Le code en fin du message produit la sortie suivante : Creation du fils debut attente du fils fin de l'attente du fils Fin du fils Alors que fork+exec ? [ par garslouche ] Bonjour, je bosse sous Linux (g++) avec Qt (mais du C ou du C++ standard peut très bien faire l'affaire) et voudrais que mon programme lance un autre Passer un code Unix sous Windows (problème avec fork) [ par nepomuk ] Je cherche à passer ce code sous windows :pid_t pid;pid=fork(); switch (pid){ case '0' : Envoi_carte(Text); break; case default Fork langage C [ par lozxxx ] Bonjour, je suis débutant en programmation j aimerais savoir comment créer un programme père qui crée 2 fils, chaque fils crée deux fils, chaque proce Constructeur par parametre [ par pinkettee ] Bonjour, dans mon programme j'ai une erreur quelque part et je sais pas comment la corriger [CODE]class Feuille{ map titrefeuille; client web service gsoap [ par aymen87 ] Bonjour Je suis en train de développer un client webservice en utilisant l'outil gsoap. j'ai exécuté l'exec wsdl2h nomheader.h monfichier.wsdl ensuit code matlab pouR PID [ par Bamboutcha1790 ] salut j'ai un code matlab de regulation PID telle qu'on lit les donnees d'une carte d'acquisition PCI-DAS 1002 puis on effectue la correction PID. je erreur link2001 [ par balbeau ] J'ai l'erreur souivante qui commence à "m'agacer"......Loading.obj : error LNK2001: symbole externe non résolu "class std::basic_ofstream > fout" (?fo La hierarchie pere et fils [:(] !!!!!!!!!!!! HELP!!!!!!!!!!! [ par laetitia334 ] bonjour a tous! j'ai un probleme avec un programme! car je ne comprend pas les termes utilisés:Main (){int pid;printf("je suis le processus initial \n Programme de régulation PID!Help,please!! [ par g6james ] Voilà,je dois réaliser un programme permettant de réguler une maquette représentant un four par l'intermédiaire d'une cible actis!Je voudrais savoir s


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,168 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales