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 :
Comme le premier fils et mon programme ne partage plus le même espace mémoire, _pid = jack_pid; ne fonctionne pas ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 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; }
Je cherhce une solution sans passer par un fichier temporaire ou tout autre chose d'externe, enfin ci c'est possible...
Merci d'avance
~~ Édit :
La solution est un pipe entre l'appli et le premier processus fils.
Partager