J'ai un problème avec Bash et je ne sais pas pourquoi.
Sous Shell, j'entre:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid" est un programme en C pour obtenir le pid actuel, comme:
int main() { printf("%d", (int)getpid()); return 0; }
Ce qui me trouble, c'est que:
Pouvez-vous m'aider?
$$
est défini pour renvoyer l'ID de processus du parent dans un sous-shell; dans la page de manuel sous "Paramètres spéciaux":
$ Étend à l'ID de processus du shell. Dans un sous-shell (), il se développe en identifiant de processus du shell actuel, pas du sous-shell.
Dans bash
4, vous pouvez obtenir l'ID de processus de l'enfant avec BASHPID
.
~ $ echo $$
17601
~ $ ( echo $$; echo $BASHPID )
17601
17634
Vous pouvez utiliser l'un des éléments suivants.
$!
est le PID du dernier processus en arrière-plan.kill -0 $PID
vérifie s'il est toujours en cours d'exécution.$$
est le PID du shell actuel.$$
est un alias dans Bash avec le PID de script actuel . Voir différences entre $$
et $BASHPID
ici , et juste au-dessus de celle de la variable supplémentaire $BASH_SUBSHELL
qui contient le niveau d'imbrication.Essayez getppid()
si vous voulez que votre programme C imprime le PID de votre Shell.
Si vous demandiez comment obtenir le PID d'une commande connue, cela ressemblerait à quelque chose comme ceci:
Si vous aviez émis la commande ci-dessous #La commande émise était ***
dd if =/dev/diskx de =/dev/disky
Vous utiliseriez alors:
PIDs=$(ps | grep dd | grep if | cut -b 1-5)
Qu'est-ce qui se passe ici est qu'il dirige tous les caractères uniques nécessaires à un champ et ce champ peut être répété en utilisant
echo $ PID
celui-ci manière universelle pour obtenir le pid correct
pid=$(cut -d' ' -f4 < /proc/self/stat)
même Nice a travaillé pour sous
SUB(){
pid=$(cut -d' ' -f4 < /proc/self/stat)
echo "$$ != $pid"
}
echo "pid = $$"
(SUB)
vérifier la sortie
pid = 8099
8099 != 8100