Dans un script bash, comment obtenir un PID à partir d'un programme exécuté lors de l'utilisation de la commande eval?
J'ai des commandes dans un script bash qui sont semblables à la présente:
eval "( java -classpath ./$classname ${arguments[@]} $redirection_options $file )" &
pid=$!
Cependant si je fais un ps $pid
il montre le script principal processus au lieu de le processus du programme java.
Il obtient le processus correct quand je omettre l'eval, mais dans le but d'obtenir une partie de la complexité de la arguments pour fonctionner correctement, j'ai besoin de l'utiliser.
Aucune idée de comment je peux obtenir le PID du programme java lorsqu'il est exécuté au sein d'un eval commande?
source d'informationauteur Milo
Vous devez vous connecter pour publier un commentaire.
Votre commercial est la semi-finition à la
eval
ligne, provoquant l' (haut-niveau) shell à la fourche d'un enfant, l'enfant shell poureval
la chaîne et à son tour exécuter votre programme java en tant que petit-fils de haut-niveau de la coque. Donc,$!
rapports le pid de l'enfant shell, qui est le plus récemment backgrounded commande.Au lieu de passer la semi-finition à l'intérieur de votre eval:
Tant que la mise entre parenthèses n'est pas obtenir assez compliqué de devenir un shell interne est exécutéle ci-dessus ne fonctionne.