2010-10-21 6 views
11

Dites que j'ai un processus d'exécution courant, comment puis-je le transformer en un objet Process en Java? Le processus est déjà en cours d'exécution, donc je ne veux pas en générer un autre, je veux juste l'encapsuler dans un objet Process que je peux utiliser dans le code java. Quelque chose le long des lignes de:Java: Obtenir un processus avec un pid

int pid = getPid(); 
Process proc = magicGetProcess(pid); 

grâce

+0

Je ne pense pas que Java dispose de capacités de gestion de processus suffisantes. J'espère que quelqu'un me prouvera que j'ai tort. –

+0

Laquelle des fonctionnalités de 'Processus 'désirez-vous le plus? Essayez-vous de faire un 'waitFor()', ou cherchez-vous à rediriger les entrées/sortiestreams vers votre application, ou quoi? Je suis certain que ce que vous demandez est impossible en soi, mais nous pourrions peut-être vous aider à répondre à vos besoins actuels. –

+0

Eh bien, je dois passer dans ce processus dans une méthode qui vérifie à peu près si elle se termine de façon inattendue et attrape le code de sortie si c'était le cas. – Th3sandm4n

Répondre

4

Je ne pense pas que ce soit possible en utilisant uniquement la bibliothèque builtin. AFAIK, il est déjà non-trivial d'obtenir le propre PID du processus en cours (voir les feature request et alternate mechanisms). Un rapide coup d'œil au java.lang.Process class montre que vous pouvez écrire votre implémentation personnalisée de java.lang.Process en utilisant JNI et le code natif. Votre classe personnalisée peut alors implémenter des méthodes supplémentaires, telles que celle de votre question.

+0

Hmm, c'est ce à quoi ça ressemble. Tant pis. – Th3sandm4n

+0

FYI: URL rompue pour java.lang.Process – Ismoh

0

In * nix saisir le code de sortie d'un processus non-enfant n'est pas facile, car le code de sortie disparaît simplement avec le processus dès que le processus parent a récupéré le code de sortie de l'enfant. Vous pouvez attacher au processus en cours d'exécution en utilisant un outil de suivi et récupérer son code de sortie lorsque le processus meurt. La plupart des systèmes d'exploitation * nix ont des outils de ligne de commande qui vous permettront de le faire (comme stracer sur Linux, faire des liens sur SunOS) d'une manière non intrusive. Cependant, vous ne pouvez les utiliser que contre vos propres processus ou si vous les exécutez en tant que root. Une autre alternative consiste à configurer le sous-système d'audit de votre système d'exploitation pour enregistrer les codes de sortie de tous les processus.

+0

Sous Unix, vous pouvez utiliser la fonction 'waitpid()' pour récupérer le code de sortie d'un processus non-enfant. Le problème est l'appel de Java. –

0

Vous ne pouvez pas. Chaque opération dans Process requiert que le processus soit un processus enfant. Pas un processus arbitraire.

0

qu'en est-il de l'utilisation de RMI? Est-il possible de passer un objet Process au Processus qu'il est? Probablement pas, parce que le processus n'est pas sérialisable

Questions connexes