Bonjour,
Comment connaitre l'ID d'un processus (pid) lancé avec la commande system(); ?
et merci d'avance
Bonjour,
Comment connaitre l'ID d'un processus (pid) lancé avec la commande system(); ?
et merci d'avance
Bonjour,
Tu veux connaître le pid dans ton programme C, ou dans un terminal ?
Dans le second cas, un 'ps aux | grep mon_process', et le tour est joué.
Dans le premier cas, il n'existe aucune solution standard.
Une solution existe toutefois : tu peux aller grater les informations sytèmes, mais dans ce cas tu te rends complètement dépendant de l'OS (aller lire dans /proc par exemple).
je ne vois pas d'autres solution dans l'immédiat, ce qui ne veut pas dire qu'il n'y en a pas.
Je veux connaitre le pid dans mon programme C
je crois que le code de retour de la primitive system est le pid du processus cree lorsque tout s'est bien passe et qu'il tourne toujours
enfin c'est ce que me laisse penser le man ...
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 The following code sample illustrates how system() might be imple- mented on an implementation conforming to IEEE Std 1003.1-2001. #include <signal.h> int system(const char *cmd) { int stat; pid_t pid; struct sigaction sa, savintr, savequit; sigset_t saveblock; if (cmd == NULL) return(1); sa.sa_handler = SIG_IGN; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sigemptyset(&savintr.sa_mask); sigemptyset(&savequit.sa_mask); sigaction(SIGINT, &sa, &savintr); sigaction(SIGQUIT, &sa, &savequit); sigaddset(&sa.sa_mask, SIGCHLD); sigprocmask(SIG_BLOCK, &sa.sa_mask, &saveblock); if ((pid = fork()) == 0) { sigaction(SIGINT, &savintr, (struct sigaction *)0); sigaction(SIGQUIT, &savequit, (struct sigaction *)0); sigprocmask(SIG_SETMASK, &saveblock, (sigset_t *)0); execl("/bin/sh", "sh", "-c", cmd, (char *)0); _exit(127); } if (pid == -1) { stat = -1; /* errno comes from fork() */ } else { while (waitpid(pid, &stat, 0) == -1) { if (errno != EINTR){ stat = -1; break; } } } sigaction(SIGINT, &savintr, (struct sigaction *)0); sigaction(SIGQUIT, &savequit, (struct sigaction *)0); sigprocmask(SIG_SETMASK, &saveblock, (sigset_t *)0); return(stat); }
sinon tu fais toi meme un fork (qui te permet de recuperer le pid) puis un exec[lv][pe] pour executer ton processus, un peu comme dans l'implementation de la fonction system() ci dessus
[edit] j'ai dit n'importe quoi, tu ne sors pas du system(...) tant que le processus fils s'execute, car la fonction system(...) attend la fin du processus cree, il faut donc que tu maitrise toi meme la creation du processus fils avec un fork
je crois que le resultat de la fct system(..); est le status du processus créer (s'il est créer ou non) ET NON pas son pid !
Je confirme. CF : http://man.developpez.com/man3/system.3.php#L4Envoyé par waldoun
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager