bonjour,
je découvre la gestion des process et l'identification par les pid sous linux
je cherche à comprendre comment ca fonctionne:
si j'ai un terminal ouvert (avec un pid correspondant au process) et que je lance
nano, je vais avoir deux pid quand jen fais la liste avec ps aux :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user pid1 bash
user pid2 nano
si j'ai un script shell ou python cgi dans lequel j'ai la fonction fork() et que je l'execute,
en principe, je devrais avoir deux pid distincts une fois la ligne fork exécutée non?
ensuite sur le coté "pratique", je pensais que faire appel à une fonction fork dans un script permettait par exemple sur un serveur controllé à distance de pas occuper le terminal avec un process de facon à ne pas occuper la ligne de commande. Mais visiblement ca ne fonctionne pas comme ca..
quand je teste dans mon script ca cree effectivement un pid distinct de mon bash (exactement comme quand je lance nano depuis ma ligne de commande) mais rien de plus.
Donc ma question : quel sont les interets pratique et theorique de la fonction fork et d'avoir des parent/master process et des slave/children process?
Idem pr un fork dans un fork (process enfant d'enfant)
# fork ?
Posté par AncalagonTotof . Évalué à 2.
De quel fork parles-tu ?
De base, fork() s'utilise en C. La fonction clone le process courant, et retourne le PID du fils au père, et 0 au fils.
Tu parles de scripts ? Peut-être du
&
à la fin d'une commande ? Si c'est ça, ton problème pourrait provenir de l'emplacement de ce&
, des guillemets ou quote manquant ("
et'
)Donne un contexte un peu plus précis, ou des exemples.
[^] # Re: fork ?
Posté par Flyounet (site web personnel) . Évalué à 2.
Il me semble que le simple fait d'utiliser
|
provoque unfork
.De même que l'utilisation de l'instruction
coproc
, ou des(
)
(y compris avec$(
)
, pour les plus anciens ``).[^] # Re: fork ?
Posté par AncalagonTotof . Évalué à 1.
Tout à fait :
provoque la création de deux process, un pour
a
, un pourb
, et l'utilisation depour établir le lien entre la sortie de
a
et l'entrée deb
.# fork
Posté par Pol' uX (site web personnel) . Évalué à 2.
Beh c'est un peu la façon sous unix d'engendrer un process.
Hiérarchiser les processes.
Hiérarchiser les processes et/ou permettre (en tuant le père) de raboter la hiérarchie (technique connue sous le nom de double fork).
Adhérer à l'April, ça vous tente ?
# anarchisme et psychanalyse
Posté par kr1p . Évalué à 1.
je pensais pas aborder des notions de psychanalyse et d'anarchisme :p!
je comprends la théorie. maintenant, tres concretement, à quoi ca me sert
de cloner un process dans un script ?
ce que je vois actuellement cest que ca crée un pid distinct mais visiblement cest aussi le cas quand je lance un programme depuis un bash.
[^] # Re: anarchisme et psychanalyse
Posté par goeb . Évalué à 2. Dernière modification le 20 septembre 2020 à 18:09.
Quand tu lances un programme depuis un bash, le bash utilise justement
fork
pour créer le nouveau process (qui exécute ce programme).En général fork ne s'utilise pas tout seul. Il est suivi de l'appel à exec (un parmi : execl, execlp, execle, execv, execvp, execvpe) :
[^] # Re: anarchisme et psychanalyse
Posté par Pol' uX (site web personnel) . Évalué à 3.
Si ça ne te sert pas, ne le fait pas.
Si un jour tu veux exécuter différents programmes « en parallèle » plutôt que « l'un puis l'autre », revient y.
Beh c'est aussi par le même mécanisme que ça se passe.
Adhérer à l'April, ça vous tente ?
# ok
Posté par kr1p . Évalué à 1.
ok, dans ce cas j'ai deux questions:
pourquoi quand on lance un programme depuis un bash, le bash reste 'occupé' par ce programme (on ne peut pas lancer une autre commande depuis ce bash) puisque un autre process pid est crée? si je lance un script depuis un terminal, est ce que je peux "libérer" ce terminal avec fork ?
est ce que indirectement, ca peut me permettre, par fork successif de définir une barre de progression dans un script (associé à d'autre commande qui m'indiquent la fin/bonne execution d'une commande dans un process différencié)?
[^] # Re: ok
Posté par AncalagonTotof . Évalué à 2.
Pas besoin de fork. D'ailleurs, en shell, fork n'existe pas en tant que tel (à ma connaissance).
Donc:
Et là,
monTruc.sh
s'exécute et tu récupères la main. Les sorties standard et d'erreur demonTruc.sh
vont se mélanger à ce que tu continueras à faire dans ton shell libre de toute entrave.<CTRL>+z
, suivit d'unbg
(pour background) :Le résultat est quasiment le même.
Un
fg
te permettra de remettre ton process au premier plan (foreground).Surtout,
monTruc.sh
lancé en arrière plan ne pourra pas interagir avec ce que tu pourrais entrer au clavier (entrée standard)[^] # Re: ok
Posté par Donk . Évalué à 2.
Tu peux aussi utiliser tmux ou screen
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.