je commence à étudier le C et bien évidemment j'essaie les divers exercices proposés ça et là. Et voici que je bute sur un problème qui est peut-être lié aux avancés de gcc.
Voici le soucis: j'essaie de faire en sorte qu'un processus soit rattaché à init
ex:
#include sys/types.h
#include unistd.h
main() {
pid_t pid;
pid = fork();
if (!pid) {
sleep(3);
execl("./executable", NULL, NULL);
} else {
return;
}
}
mon soucis ici, c'est que executable reprend le pid du lanceur...
Merci d'avance pour vos lumières et désolé pour la question que certains jugeront stupide.
# Commentaires
Posté par alf . Évalué à 10.
[^] # Re: Commentaires
Posté par gatosek . Évalué à 2.
Merci pour ta réponse et ces précisions :)
Mon ouvrage de référence concernant l'étude de C est celui publié par Brian Kernighan et Denis Ritchie: "Le langage C - norme ANSI" aux éditions Masson.
Le code que j'ai présenté dans mon premier post était intentionnellement réduit à sa plus simple expression afin de centrer exactement la source de mon problème. En évitant de surcharger «inutilement» mon exemple je me donnais l'avantage d'être lu par un maximum de personnes :) Quand c'est trop long beaucoup de lecteurs zappent.
Ceci étant, je ne parviens toujours pas à lancer executable avec un PID égal à 1.
Je continue mes recherches tout en appronfondissant... Un jour sûrement... ;)
Merci encore en tout cas pour ces bons conseils :)
D'ailleurs en passant, si vous avez des sites ou ouvrages à me recommander n'hésitez pas :)
[^] # Re: Commentaires
Posté par Cereal Killer . Évalué à 3.
Le fait d'avoir un PID == 1 n'est tout simplement pas possible. 1 est "reservé" à init qui est le premier porcess lancé et tout les autres dépendront de lui (même indirectement).
DONC, avoir un process avec un pid 1, c'est mort.
Maintenant, avoir un process qui dépende de 1 (PPID == 1), dépend plutot de comment tu le lances. En l'occurence, lance le avec un & à la fin et celui ci se "détachera" de ton shell et prendra comme PPID celui d'init.
Concernant ton problème (celui exposé dans ton post initial), lis un peu de doc sur fork() et ça devrais allé.
Plus globalement, qu'est-ce que tu veux faire ?
Et enfin, le Kernighan & Ritchie est un très bon bouquin pour apprendre le c.
Courage!
[^] # Re: Commentaires
Posté par alf . Évalué à 3.
Le & fait dépendre le process d'init ? J'ai un doute, là... Il ne le lance pas plutôt dans un sous-shell, pour en garder le contrôle ? (je n'ai pas de shell sous la main pour faire le test)
[^] # Re: Commentaires
Posté par Cereal Killer . Évalué à 2.
Effectivement, rajouter un & ne le fait pas dépendre d'init, mais bel et bien du shell qui l'as lancé.
Par contre, quand on ferme le shell qui l'a lancer, le process se retrouve sans papa (orphelin) et init en reprend donc la garde.
[^] # Re: Commentaires
Posté par alf . Évalué à 3.
[^] # Re: Commentaires
Posté par gatosek . Évalué à 2.
en effet, c'est bien du ppid dont il est question.
Mon problème venait de là (pid != ppid)
J'espère que ces fautes stupides d'écriture se feront plus rares au fil de ma progression. Grace à Vim je suis quasi assuré de ne pas oublier un guillemet mais pour le reste...
J'ai de quoi faire maintenant avant de revenir vous ennuyer :)
Un grand merci à vous deux (alveric et cereal killer) pour vos indications :)
à la prochaine pour des interrogations surement beaucoup plus complexes :)
[^] # Re: Commentaires
Posté par gatosek . Évalué à 1.
>Bon choix pour le K&R ;) Je suppose que c'est la 2è édition ?
oui :)
et merci pour les liens pointant sur les erratas :)
[^] # Re: Commentaires
Posté par mokbir . Évalué à 1.
mais c'est un bon livre
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.