Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HS] system(), fork()

2 réponses
Avatar
Guillaume GOURDIN
Bonjour à tous,

je voudrais lancer un processus avec system(), mais je voudrais que
l'appel de system() ne soit pas bloquant, et qui plus est, je voudrais
pouvoir tuer la commande appelée si besoin est. A priori je suis sous
Linux, mais s'il y a de solutons portables, je suis bien évidemment preneur.

Merci pour votre aide.

2 réponses

Avatar
Alain Ketterlin
Guillaume GOURDIN writes:

je voudrais lancer un processus avec system(), mais je voudrais que
l'appel de system() ne soit pas bloquant, et qui plus est, je voudrais
pouvoir tuer la commande appelée si besoin est. A priori je suis sous
Linux, mais s'il y a de solutons portables, je suis bien évidemment
preneur.


Voir fork(2), execve(2), wait(2) et kill(2). En gros :

pid=fork();
if ( pid < 0 ) {
perror("fork");
exit(1);
} else if ( pid == 0 ) {
...
execve(...); /* ou execl(3), execlp, execv, execvp ... */
exit(1);
}
...
kill(pid,SIGTERM);
...
/* et peut-etre */
wait(&stat); /* ou waitpid(...) */

Tout ça c'est POSIX il me semble.

-- Alain.

Avatar
James Kanze
On Oct 2, 3:22 pm, Alain Ketterlin
wrote:
Guillaume GOURDIN writes:
je voudrais lancer un processus avec system(), mais je voudrais que
l'appel de system() ne soit pas bloquant, et qui plus est, je voudrais
pouvoir tuer la commande appelée si besoin est. A priori je suis sous
Linux, mais s'il y a de solutons portables, je suis bien évidemment
preneur.


Voir fork(2), execve(2), wait(2) et kill(2). En gros :


[...]
Tout ça c'est POSIX il me semble.


Tout à fait. Et s'il a Posix, ou un interprêteur de commandes
plus ou moins compatible, il suffit qu'il ajoute un '&' à la fin
de la commande qu'il envoie à system(). (Mais ça n'a pas l'air de
marcher avec bash de CygWin sous Windows.)

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34