Je veux avoir un script shell comme ceci:
my-app &
echo $my-app-pid
Mais je ne sais pas comment obtenir le pid de la commande qui vient d'être exécutée.
Je sais que je peux simplement utiliser la jobs -p my-app
commande pour grep le pid. Mais si je veux exécuter le shell plusieurs fois, cette méthode ne fonctionnera pas. Parce que le jobpec est ambigu.
bash
shell
process
background-process
David S.
la source
la source
/bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &
- sysfault 24 nov. '10 à 14h28echo $!
my-app & myVar=$! ; fg
.fg
ramène le processus à l'avant-plan. Je peux ensuite imprimerecho $myVar
plus tard et je suis à peu près sûr que l'application my-app est déjà terminée.Obtenez
PID
:Enregistrer
PID
dans la variable:Enregistrez toutes les occurrences
PID
dans un fichier texte:Enregistrer la sortie, les erreurs et
PID
dans des fichiers séparés:la source
my-app
finitions et peut-être même pire, son PID est réutilisé plus tard, vous aurez de mauvaises informations dans votre fichier. Je ne pense pas que cette réponse ajoute vraiment beaucoup de valeur à la réponse acceptée existantesleep 4 | grep INVALID & export MY_PID=$!; fg; echo $MY_PID returned with $?
`main &
un moyen de récupérer le PID?Essayez quelque chose comme
la source
Essayez quelque chose comme ça:
En plaçant la première lettre de votre processus entre les deux,
[
]
vous vous assurez que legrep
processus ne figure pas dans votre liste. Si nécessaire, vous pouvez également ajouter un grep sur votre nom d'utilisateur.la source
my-app
on l'exécute plus d'une fois - davidshen84 s'inquiète spécifiquement de ce cas.pgrep
place.