2017-03-31 6 views
1

commande ci-dessous imprime pid de sous-shell et sous-shell de sous-shell:comment forcer sous-shell sur le niveau 2 être propre pgid?

$ ((echo $BASHPID)& echo $BASHPID)& sleep 1 
[1] 9885 
9885 
9887 
[1]+ Done     ((echo $BASHPID) & echo $BASHPID) 

commandent maintenant ci-dessous est plus compliqué, mais il indique que le deuxième sous-shell est « groupe de processus » de la première sous-shell:

$ ((echo $$ $BASH_SUBSHELL $BASHPID ; export BBB=$BASHPID; ps -e -o pid,pgid,ppid,comm | grep -E "$$|$BBB|PGID" | grep -E "bash|PGID")& echo $$ $BASH_SUBSHELL $BASHPID; sleep 1)& sleep 1 
[3] 9973 
2787 1 9973 
2787 2 9975 
    PID PGID PPID COMMAND 
2787 2787 2769 bash 
9973 9973 2787 bash 
9975 9973 9973 bash 

Existe-t-il un moyen simple de créer une commande similaire qui affichera un numéro unique pour la dernière ligne de la deuxième colonne?

Répondre

0

Il n'y a aucun moyen de le faire puisque vous déconnectez les sous-couches du processus en cours (PGID) avec l'opérateur & donc exécutera un processus séparé (nouveau PGID).

Vérifiez ce ceux aussi: How to set process group of a shell script

+0

mais pourquoi premier sous-shell a sa propre PGID et le second sous-shell - ne fonctionne pas? (et appartient au premier sous-shell PGID). En d'autres termes je veux détacher une fois de plus du premier shell PGID – noonex

+0

Vos sous-clichés sont imbriqués, le PPID de l'externe est la console bash elle-même, son PGID est le sien depuis sa séparation. Je me demande toujours pourquoi le sous-shell interne n'a pas son propre PGID difficile. –

+0

Sachez que je n'ai pas répondu à votre question: p –