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

トップ ページ

このメッセージに返信
著者: Patrice Karatchentzeff
日付:  
To: guilde
古いトピック: Re: Décompte différent dans un script et en ligne de commande
新しいトピック: Re: Décompte différent dans un script et en ligne de commande
題目: 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-  ) )-,_. ,\ (  `'-'
    '---''(_/--'  `-'\_)