Comment connaître le processus PID sur une machine Linux

0

Je lance un programme d'installation à partir de Java pour installer un logiciel sur Linux, je veux connaître son "identifiant de processus et son nom".

Dans Windows, j'ai pu l'obtenir en utilisant la tasklistcommande, mais sous Linux, je n'ai pas été capable de faire la même chose. J'ai essayé avec ps -efet les ps -Acommandes, mais cela ne montre pas le nom de l'image ou le PID du processus.

Y at-il une commande pour obtenir ces valeurs?

kgopi
la source

Réponses:

1

La plupart des distributions Linux modernes ont une commande pratique pgrep( processus grep ), créée juste à cette fin. Utilisez-le comme ceci:

pgrep -lf programname

Contrairement à naïf ps ax | grep programname, pgrepsait comment ne pas afficher l'identifiant du processus.

Il existe également un utilitaire complémentaire pkill, qui peut tuer le processus par son nom (ou envoyer d'autres signaux).

mvp
la source
Je l'ai essayé, cela n'a pas fonctionné ....... Ici, le problème est que je ne connais même pas le nom du processus. Par exemple, dans Windows, j'ai lancé un programme d'installation appelé xxx.exe, puis je peux voir. le titre du processus en tant que "xxx" (titre de la fenêtre / nom du processus) avec lequel je reconnais l'existence de la fenêtre ............ De la même manière, je souhaite le faire pour Linux (mais aucun processus n'a existé avec titre nom) Y at-il une commande pour l'obtenir -
Vous devez connaître le nom du processus ou le nom du programme. Si vous ne le faites pas, inspectez soigneusement la sortie de ps ax. De plus, le démarrage topou atopdans une autre console peut nous éclairer sur le nom de processus réel du programme d'installation. Il est fort probable qu'il s'agisse du processus en haut une fois que l'installation a commencé.
MVP
Je veux le nom de processus de mon programme d'installation
C’est ce que je vous ai dit: démarrez topsur une autre console, puis démarrez votre programme d’installation, revenez rapidement topet observez le processus qui utilise le plus le processeur.
MVP
0

Essayez ps -aef | grep your_process_name, remplacez your_process_namepar votre nom d'installation.

J'espère que cela t'aides !!


la source
Bonjour Alankar, Le problème, c’est que je ne connais même pas le nom du processus, par exemple, dans Windows, j’ai lancé un programme d’installation appelé xxx.exe, puis je peux voir le titre du processus en tant que "xxx" (titre de la fenêtre / nom du processus ) avec cela je reconnais l'existence de windows ............ De la même manière, je veux le faire pour Linux (mais aucun processus n'existait avec le titre) Y a-t-il une commande pour l'obtenir
@kgopi. Comment vous démarrez votre installateur sous Linux.
par l’invite de commande comme d’abord, je navigue dans le dossier du programme d’installation, puis j’exécute la commande "./xxx.bin"
Souvent (par exemple pour les pilotes NVIDIA) le *.runest un shscript énorme , donc ps auxwvous voyez le shprocessus; topva également vous montrer tous les processus les plus actifs ...
Basile Starynkevitch
1
@kgopi Ensuite, vous pouvez donner ce xxx seulement après grep quelque chose comme çapa -aef | grep -i xxx
0

Il est généralement préférable de capturer l'ID de processus au moment de le lancer plutôt que d'essayer de le trouver plus tard.

Si vous utilisez l'API C, vous obtenez le PID du processus généré en tant que valeur de retour depuis forkou vforkdans le processus mère.

Dans un shell$! dérivé de Bourne , vous utilisez immédiatement après le démarrage.

dmckee
la source
J'utilise java pour lancer le programme d'installation sur une machine Linux comme ceci: runtime.exe ("xxx.bin"). donc, par java, puis-je aussi obtenir le nom de processus PId \
Je ne peux pas vous aider beaucoup avec Java. Il existe au moins deux anciens threads Stack Overflow sur le sujet , mais aucun n’a vraiment de bonne réponse.
dmckee
0

Il semble que vous recherchiez une solution centrée sur Linux plutôt que sur une solution portable. Sous Linux, le moyen facile, efficace et fiable d'obtenir les informations dont vous avez besoin de Java consiste à utiliser le procsystème de fichiers, et en particulier le /proc/selfrépertoire. La man 5 procpage de manuel décrit chaque fichier.

Le pidpremier champ de /proc/self/stat. Le nom de l'image est le deuxième.

Il est très facile d'écrire une classe pour envelopper ces appels. Ce ne seront que quelques lignes de code faisant des E / S de base: rapides et robustes. L'utilisation de programmes tiers est plus difficile à obtenir et moins efficace.

Cette solution n'est pas portable car la plupart des systèmes Unix ne possèdent pas de procsystème de fichiers. Vous avez quatre options du meilleur au pire, à mon humble avis:

  • Capturez les informations dont vous avez besoin avant de commencer le processus: cela peut être facile ou non, en fonction de votre application.
  • Trouvez des implémentations propres et spécifiques au système, comme le procsystème de fichiers pour Linux
  • Utilisez une API non spécifiée. RuntimeMXBean.getName()renvoie généralement le pid, vous pouvez également utiliser la réflexion pour y accéder java.lang.UnixProcess.pid. L'implémentation peut différer selon les machines virtuelles et peut changer à tout moment. Des solutions acceptables si vous contrôlez l'environnement.
  • Écrire du code natif pour accéder à l'API POSIX
  • Utiliser des outils externes comme ps

Si vous décidez de vous fier à des outils externes, vous devez faire très attention à la portabilité (les options et la sortie peuvent varier considérablement entre deux systèmes d'exploitation) et aux paramètres régionaux.

Clément MATHIEU
la source
0

s'il s'agit d'un installateur graphique, vous pouvez exécuter ce one-liner dans un terminal:

ps -fp $(xprop _NET_WM_PID | cut -d' ' -f3)

le curseur de votre souris se transformera en réticule. Maintenant, cliquez sur la fenêtre en question. vous devriez maintenant voir les informations de processus imprimées dans le terminal.

qwertz
la source