fork_()

Codes specifiques à Linux
Anonyme

fork_()

Message par Anonyme »

Comment créer un nouveau processus "enfant " à partir d'un simple code :

le pere et le fils partage la même console !

Code : Tout sélectionner

Macro pid_t
i
EndMacro


pid.pid_t
nom$ = "Father"

pid = fork_()

If pid=0
OpenConsole()
	nom$ = "Childreen"
		PrintN(" i'am "+nom$)
	Else
	OpenConsole()
		PrintN(" i'am "+nom$)

EndIf 



Input()
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

Version plus élaboré

Code : Tout sélectionner

Macro pid_t
i
EndMacro
#SIGKILL = 9 ;signal qui tue un processus linux

pid.pid_t
nom$ = "Father"

pid = fork_()

If pid=0
   OpenConsole()
   nom$ = "Childreen"
   PrintN(" i'am " + nom$ " + le PID de mon pere est " + str(getppid_()))
   Input()
ElseIf pid>0
   OpenConsole()
   PrintN(" i'am " + nom$ + " mon PID est " + str(getpid_())
   PrintN("je vais tuer mon fils")
   input()
   kill_(pid, #SIGKILL)
Else
   Printn("rachète toi un PC t'arrive même plus a créer un processus")
EndIf

Input()
Je n'ai pas testé mais sa doit marcher
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Pas mal vos codes...

Vous etes vousdéjà penché vers les daemons en purebasic ?
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

Pas trop le temps de faire un DAEMON mais si vous voulez le principe :

On crée un programme que l'on place dans /etc/init.d/. Ce programme comporte une boucle infinie qui se réveille tout les X seconde (grâce a un delay). Tout les X secondes notre programme vérifie sont répondeur pour voir si il a des signaux qui lui sont parvenue. Si il y a des signaux il crée un processus fils qui va exécuter la tache relative au signal tandis que le père se rendors pour X secondes.

Les programmes dans /etc/init.d/ sont exécuté automatiquement au démarrage.

Pour envoyer des signaux au DAEMON il faut connaitre sont PID (identifiant du processus) que vous pouvez récupérer facilement grâce a la commande "top" par exemple. Après on envoie un signal avec KILL. Il existe beaucoup de doc sur les signaux unix je vous laisse regarder sur google.

Sinon vous pouvez aussi utiliser un tube pour communiquer avec le DAEMON.
Répondre