CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Linux-C]fork/exec depuis un daemon

twk
twk
Niveau 6
03 avril 2007 à 19:15:16

Bonjour,

Pour mes besoins personnels, j´ai decidé de coder une espèce
de remote shutdown affin d´éteindre a distance les pcs de mon réseau
sans nécessairement avoir a mettre du ssh juste pour ça.

Toute la partie reseau fonctionne sans problème, mais là ou
j´ai des difficultes, c´est pour faire un fork exec.
En effet pour pouvoir lancer mon server depuis un script
init.d il faut que mon process soit un daemon.
Si je lance mon server sans le Daemonizer, shutdown s´execute
a priori sans pepin. Mais par contre si je daemonize le process,
mon execl n´a absolument aucun effet (il en va de meme pour system()).

D´après mon ami google ca pourrais venir du fait que lorsque
je daemonize je ferme tout les déscripteurs ratachés au process père et que je
rattache stdin/out et err a /dev/null.
Mais étant un debutant je me suis basé sur un exemple de code pour daemonizer et
je sais pas exacement ce qu´il faudrais que je fasse pour que mon execl remarche.

Le code pour daemonizer corresponds a la fonction daemonize()(nom tres original ^^)
celui pour le fork/exec de shutdown est sdown() le tout dans sig.c

Sources du server:
http://theainur.free.fr/rshdd.tar.gz
Sources du client(même si dans se cas ca sert a rien ^^):
http://theainur.free.fr/rshd.tar.gz

make pour compiler
make install pour installer (y a aussi un uninstall)
($PREFIX dans le makefile est par default a "/usr")
et ca met un script dans /etc/init.d
donc /etc/init.d/rshdd start pour le lancer
et /etc/init.d/rshdd stop pour arreter
le port d´ecoute est 4896 (je l´ai choisi au hasard ^^)
et ca envoie des messages dans /var/log/daemon.log
(pour une config par default de syslog).

N´hezites pas me faire savoir si le code est trop crade
ou si il y a un moyen quelconque d le rendre plus lisible^^

Pour l´instant j´éssaie de faire en sorte que ca marche je réglerais le problème de la securité plus tard.

Merci d´avance.
Twk

blip
blip
Niveau 6
03 avril 2007 à 22:40:48

Je dirais que le problème viens du fait que tu passe en daemon apres avoir ouvert tes fichier et socket, du coup comme les files descriptors sont associés au processus pere, ils sont fermés dès que tu fais un exit dans celui ci. En "daemonizant" au debut ça irait mieux je pense.

godrik
godrik
Niveau 30
03 avril 2007 à 23:11:49

je n´ai pas lu le code mais le commentaire de clip est faux.
Sous unix quand tu fork, tu crée des copies des files descriptor. Le fichier est apres le fork ouvert par deux processus different. Les deux pouvant y acceder.

"mon execl n´a absolument aucun effet "
il devrait renvoyer un code d´erreur alors et fixer errno. qu´indiquent ces valeurs ?
tu peux toujours ouvrir un fichier dans tmp pour ecrire sur tes logs.

twk
twk
Niveau 6
03 avril 2007 à 23:36:00

En fait dans la fonction qui passe le prog en daemon il y a une partie qui ferme tous les descripteurs ouverts par le pere et c´est je pense ce a quoi faisait référence blip:
for(i=getdtablesize();i>=0;--i)
close(i);
Du coup j´ai mis l´appel a la fonction au debut.
Apparament le execl a l´air de remarcher mais je vais quand meme faire des tests supplementaires pour voir.
merci encore pour votre aide^^.

twk
twk
Niveau 6
03 avril 2007 à 23:46:59

Bon apres avoir faits quelques tests avec differentes commandes ca a marche dans tous les cas.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment