Re: Décompte différent dans un script et en lignede commande

Startseite

Nachricht beantworten
Autor: Patrice Karatchentzeff
Datum:  
To: guilde
Alte Treads: Re: Décompte différent dans un script et en ligne de commande
Neue Treads: Re: Décompte différent dans un script et en ligne de commande
Betreff: Re: Décompte différent dans un script et en lignede commande
Oui, en ligne de commande, cela fonctionne.

C'est en lançant le script que cela incrémente.

Je n'arrive à reproduire le processus avec strace qu'en lançant un
shell de plus :

% strace -f -e execve,clone,fork,waitpid bash -c 'nb=$(ps -edf | grep
-c thunderbird); if [[ $nb > 4 ]]; then echo "Bingo: $nb"; fi'

execve("/usr/bin/bash", ["bash", "-c", "nb=$(ps -edf | grep -c
thunderbi"...], 0x7ffcda427138 /* 69 vars */) = 0
clone(child_stack=NULL,
flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0x7f79badb1a10) = 3760852
strace: Process 3760852 attached
[pid 3760852] clone(child_stack=NULL,
flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLDstrace: Process
3760853 attached
, child_tidptr=0x7f79badb1a10) = 3760853
[pid 3760852] clone(child_stack=NULL,
flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLDstrace: Process
3760854 attached
, child_tidptr=0x7f79badb1a10) = 3760854
[pid 3760853] execve("/usr/bin/ps", ["ps", "-edf"], 0x55e2836880a0 /*
69 vars */ <unfinished ...>
[pid 3760854] execve("/usr/bin/grep", ["grep", "-c", "thunderbird"],
0x55e2836880a0 /* 69 vars */ <unfinished ...>
[pid 3760853] <... execve resumed>)     = 0
[pid 3760854] <... execve resumed>)     = 0
[pid 3760854] +++ exited with 0 +++
[pid 3760853] +++ exited with 0 +++
[pid 3760852] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED,
si_pid=3760854, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
[pid 3760852] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3760852,
si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
Bingo: 8


8, c'est avec l'éditeur en plus... et la commande strace, donc on est
toujours à 4+2 :

Le shell en plus, c'est le bash -c qui exécute un execve de plus dans
la ligne de commande (on ne peut pas lancer de strace sur une commande
système avec un pipe directement, ou alors lancer un strace par
commande du pipe), mais cela revient à lancer un script (le shebang
fait la même chose). Si je trace le script, j'ai exactement le même
nombre de forks...

Je pense que c'est inhérent à la façon de lancer la commande. Si l'on
passe par le script, on forke, donc on augmente le nombre de pids
mécaniquement.

J'aurais juste voulu avoir une doc claire à ce sujet.

Je vais adapter mon script en conséquence.

Merci en tout cas,

PK

Le lun. 29 janv. 2024 à 09:04, Christian Marillat <marillat@???> a écrit :
>
> On 29 janv. 2024 08:43, Patrice Karatchentzeff <patrice.karatchentzeff@???> wrote:
>
> > En fait, non : j'en ai systématiquement deux de plus...
>
> Pas chez moi :
>
> ,----
> | $ ps -edf|grep -c thunderbird
> | 4
> | marillat@debian~
> | $ ./monscript.sh
> | ++ ps -edf
> | ++ grep -c thunderbird
> | + command=4
> | + echo command=4
> | command=4
> | + [[ 4 > 5 ]]
> `----
>
> Christian
>



-- 
      |\      _,,,---,,_           Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:patrice.karatchentzeff@gmail.com
     |,4-  ) )-,_. ,\ (  `'-'
    '---''(_/--'  `-'\_)